Info provided by Autopia-carcare.com
"Tobacco smoke is one of the most difficult smells to remove from a car. The smoke permeates everything, including the foam rubber used in seat cushions. You can successfully remove most of the tobacco smell by shampooing the carpets and upholstery with Kids & Pets Brand (www.kidsnpetsbrand.com) Stain & Odor Remover, and wiping down all other surfaces with a sponge and Kids & Pets Brand Stain & Odor Remover. After the carpet has dried for 24 hours, sprinkle baking soda on the carpet, rub it in with your hands, and leave it for a week. After a week, vacuum your carpets. The baking soda will absorb the remaining odor in the carpet. Don't forget to scrub the headliner, as this is the source of a lot of the smell.
You might need to repeat the baking soda deal a couple of times, and I have even heard of cutting open the side of a box of baking soda, and with double sided tape, taping the box to the carpet under the front seats."
I also think that the headliner is one of the smelliest part of a smoker's car, so vacuum and shampoo it if you can, or find a professional cleaner who will do it right.