Kagiso Rabada took five wickets as Bangladesh were bowled out for 147 in their first innings on the second day of the second Test and forced to follow-on by South Africa at the Mangaung Oval in Bloemfontein.
Bangladesh were seven without loss second time around when bad light brought play to a premature close on Saturday, still trailing by 419 runs.
Rabada finished with figures of five for 33 as only wicketkeeper Liton Das provided any resistance in Bangladesh's reply to South Africa’s mammoth first innings score of 573 for four declared.
Das hit 70 runs, just short of half his team’s total, as Bangladesh buckled under the pace attack of Rabada and his frontline partner, Duanne Olivier, who finished with three for 40.
Hashim Amla and captain Faf du Plessis both completed centuries before lunch after the home team began day two on 428 for three.
Amla, 89 not out overnight, quickly moved to his 28th Test century, now the second-highest number of tons by a South African, before being bowled soon after lunch for 132.
Du Plessis went from 62 at the start of play to 135 not out as South Africa dominated the Bangladesh bowling.
Subashis Roy finished with three for 118.
Amla and Du Plessis joined Dean Elgar, who made 113, and Aiden Markram, bowled for 143 in just his second Test, as South Africa's centurions.
Hardik Pandya, from the fringes to the forefront
India's bowling sensation Bhuvi is engaged! Congratulate him
Why Nehra's return excites this young pacer
PHOTOS: Football fever hits Team India after nets washed out
'They are a pretty HOT team at the moment, aren't they?'