#!/usr/bin/php
<?php

// user:realm:MD5(user:realm:pass)

if (($argc < 4) || ($argc > 5)) {
	fwrite(STDERR, "Syntax: digestfile username password [realm]\n");
	exit(2);
}

$digestfile  = $argv[1];
$username    = $argv[2];
$newPassword = $argv[3];
$realm       = isset($argv[4]) ? $argv[4] : null;

if (!file_exists($digestfile)) {
	fwrite(STDERR, "File $digestfile not found\n");
	exit(1);
}

$out = array();

$lines = file($digestfile);
foreach ($lines as $line) {
	$line = trim($line);
	$ary = explode(':', $line);
	if ((count($ary) == 3) && ($ary[0] == $username) && (is_null($realm) || ($realm == $ary[1]))) {
		$out[] = $username.':'.$ary[1].':'.md5($username.':'.$ary[1].':'.$newPassword);
	} else {
		$out[] = $line;
	}
}

file_put_contents($digestfile, trim(implode("\n", $out))."\n");
