Verify confirmed hmac in web display, showing status as either 'confirmed'
[mirror/userdir-ldap-cgi.git] / update.cgi
index 8e74b3e..f78a7eb 100755 (executable)
@@ -127,7 +127,15 @@ if (!($query->param('doupdate'))) {
       $sudopassword .= "<tr><td>Unparseable line!</td></tr>\n";
       next;
     }
-    $status =~ s/:.*//; # remove verification hmac, it's just noise here.
+    if ($status =~ /^confirmed:/) {
+      my $data = join(':', 'password-is-confirmed', $uuid, $hosts, $crypted);
+      my $hmac = hmac_sha1_hex( $data, $hmac_key);
+      if ($status eq "confirmed:$hmac") {
+        $status = 'confirmed';
+      } else {
+        $status = 'INVALID';
+      }
+    }
     my $e = "<tr><td>".CGI::escapeHTML($hosts)."</td>
                  <td>".CGI::escapeHTML($status)."</td>
                  <td><small>not shown</small></td>