Match ends, Cardiff City 1, Millwall 1.
Jed Wallace ruined Neil Harris' Millwall reunion as his brilliant free-kick earned the Lions a point at Cardiff City.
Harris' first encounter with Millwall since he stepped down as manager of the club in October was going to plan when Aden Flint put the Bluebirds in front just before the hour.
But Millwall quickly drew level thanks to leading scorer Wallace's ninth goal of the season.
The 1-1 draw means Harris' promising start to life as Cardiff boss continues, with just one defeat coming in eight games since he took charge in the Welsh capital.
It is a similar story for Harris' successor at Millwall, Gary Rowett, who has lost only two of his 11 games at the helm.
Harris is the all-time leading scorer at the Den, where he had two spells as a player before taking over as manager in 2015, yet insisted before this game that his Millwall connections were irrelevant.
In truth, a player with Harris' ability to sniff out a goal would have been welcome on the pitch during a first half which was seriously short on quality.
Millwall offered marginally more threat, with Wallace drawing a comfortable save from Neil Etheridge before feeding Tom Bradshaw on a second burst up the pitch.
The visiting bench screamed for a penalty as Bradshaw tumbled under Curtis Nelson's challenge but referee David Webb waved play on.
Bartosz Bialkowski was called into action for the first time just seconds before the half-time whistle, when Robert Glatzel made space for a powerful 20-yard drive which was beaten away by the Millwall goalkeeper.
Bialkowski was required to save Millwall again early in the second half, stretching to his left to push Lee Tomlin's fabulous half-volley wide of the post.
The Poland international was again called into action to save Joe Bennett's free-kick, before a Millwall corner ended with a Shaun Hutchinson shot that was blocked by Nelson.
Suddenly the game had sparked into life.
The deadlock was broken on 59 minutes, with summer signing Flint tapping in his third Cardiff goal from a couple of yards out after Marlon Pack flicked on Bennett's right-wing corner.
Cardiff were not ahead for long, however, as Wallace struck just four minutes later.
Harris would have known what was coming as Wallace placed the ball around 30 yards from goal, for the former Wolverhampton Wanderers winger was one of 10 players in Millwall's starting side he brought to the club.
But there was nothing Cardiff could do to stop Wallace's superb set-piece as the ball flashed into the top corner of the net.
Both teams huffed and puffed late on, but the draw was about right and ensures they remain side by side in mid-table.
Cardiff City manager Neil Harris:
"I'm disappointed not to win. I was really pleased to get in front and have a really good 15-20 minutes at the start of the second half.
"We stood strong against the counter-attack - set-plays were the only real opportunity for them to score today. We defended the free-kicks and corners well.
"Ultimately what's cost us is Jed scoring a goal from 30 yards which is a top-quality strike.
"We are creating chances, 13 today and several on target, but are they clear-cut? Are we making them in open play? Do I want more from my wide players? Yeah I do. Do I expect more? Yes I do. That's the demand."
Millwall manager Gary Rowett:
"We have had a tough period in terms of injuries and illnesses which have really stretched the squad.
"I am not expecting any sympathy but I think it stretched us as the game went on.
"First half I was really pleased with our composure. It was a clear penalty on 18 minutes where (Jake) Cooper gets the wrong side of Robert Glatzel and Glatzel pulls his shirt.
"Second half Cardiff had a bit more control. There was a great save from Bialkowski from Tomlin, then we concede a poor goal from a set-piece when Flint loses Cooper, then Jed gets us out of trouble with a fantastic strike.
"We probably go away slightly the happier team because a point away from home is always reasonable."
- 2PeltierSubstituted forRichardsat 44'minutes
- 33HoilettBooked at 81minsSubstituted forWhyteat 90+1'minutes
- 9GlatzelSubstituted forWardat 77'minutes
- 11FergusonSubstituted forM Wallaceat 73'minutes
- 7J Wallace
- 9BradshawSubstituted forSmithat 83'minutes
- 23BödvarssonSubstituted forMahoneyat 73'minutes
- 3M Wallace
- David Webb
- Shots on Target
Second Half ends, Cardiff City 1, Millwall 1.
Neil Etheridge (Cardiff City) wins a free kick in the defensive half.
Foul by Jake Cooper (Millwall).
Corner, Millwall. Conceded by Jazz Richards.
Attempt blocked. Matt Smith (Millwall) header from the centre of the box is blocked. Assisted by Jed Wallace with a cross.
Corner, Millwall. Conceded by Aden Flint.
Offside, Cardiff City. Lee Tomlin tries a through ball, but Aden Flint is caught offside.
Curtis Nelson (Cardiff City) wins a free kick in the defensive half.
Foul by Matt Smith (Millwall).
Attempt missed. Gavin Whyte (Cardiff City) left footed shot from the left side of the box misses to the left. Assisted by Nathaniel Mendez-Laing.
Substitution, Cardiff City. Gavin Whyte replaces David Junior Hoilett.
Substitution, Millwall. Matt Smith replaces Tom Bradshaw.
Attempt saved. Murray Wallace (Millwall) right footed shot from outside the box is saved in the centre of the goal. Assisted by Jayson Molumby.
David Junior Hoilett (Cardiff City) is shown the yellow card for a bad foul.
Alex Pearce (Millwall) wins a free kick in the defensive half.
Foul by David Junior Hoilett (Cardiff City).
Corner, Cardiff City. Conceded by Shaun Williams.
Jake Cooper (Millwall) wins a free kick in the defensive half.
Foul by Danny Ward (Cardiff City).