Captain Smith finished on 111 as the touring team reached 217-2 to trail Australia by 333 runs on the first innings. Morkel earlier finished with 5-146 to help dismiss Australia for 550 after it resumed at 482-5.
Smith shared a 138-run opening stand with Alviro Petersen, who made 54 before getting run out. Hashim Amla was then stumped by wicketkeeper Matthew Wade off the bowling of part-time spin bowler David Warner for 11.
Left-hander Smith combined with Jacques Rudolph for 48 runs to guide the Proteas to stumps without further loss as they seek to retain their status as the No. 1-ranked Test team in the three-match contest.
Morkel took three wickets in the morning session, including removing home captain Michael Clarke for 230, for his fifth five-wicket haul in Tests and first against Australia.
The Australians lost their last five wickets for 68 runs in the morning session after plundering the South African bowling attack for 5 1/2 runs an over on day one. James Pattinson smashed 42 off 35 balls to help lift the total after Australia fell to 504-9.
Clarke added six runs to his overnight score after yesterday becoming the first batsman in elite Tests to register four double centuries in a calendar year. Warner and Mike Hussey also reached triple figures in Australia’s innings.
South Africa would stay atop the International Cricket Council’s Test rankings by avoiding defeat in the best-of-three contest, while Australia can overtake the Proteas at No. 1 with a series victory.
To contact the reporter on this story: Dan Baynes in Sydney at email@example.com
To contact the editor responsible for this story: Christopher Elser at firstname.lastname@example.org