South Africa had Jacques Kallis and AB de Villiers to thank for drawing close to India's first-innings score by stumps on Day 3 in Durban.
The hosts batted patiently on another weather-affected day in Kingsmead and finished at 299-5 in reply to India's 334.
Kallis was unbeaten on 78, bearing down on a 45th Test century in what is his final match.
His innings was just as important as any he's played over the course of his lengthy career, coming in on the back of a flurry of quick wickets.
India struck early, with South Africa's overnight position of 82 without loss turning into 113 for 3.
Spinner Ravindra Jadeja was the architect of the mini-collapse, taking two wickets, including that of Graeme Smith (47), caught attempting a big shot, and Alviro Petersen (62), picked up at slip.
In between times Hashim Amla's miserable series continued when he was clean-bowled once more by Mohamed Shami.
De Villiers and Kallis did a great job of undoing the damage. Wicketkeeper de Villiers was the aggressor, playing a feisty knock worth 74 including nine boundaries, while Kallis adopted the anchor role.
For a while they looked immovable until Jadeja returned and drew another edge from de Villiers, snaffled at slip.
But Kallis plodded on, passing his 150th international half-century and bearing down on still more landmarks. He will rise to third in the all-time list of Test run-scorers if he bats for long against India on Day 4.
The Proteas will need him to do so, having lost JP Duminy for 28 late in the day and sending in Dale Steyn as nightwatchman as the light deteriorated and the rain descended.