<pre style='margin:0'>
Herby Gillot (herbygillot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/4e06b2d96409322eca283dfc8287a29e0e15172e">https://github.com/macports/macports-ports/commit/4e06b2d96409322eca283dfc8287a29e0e15172e</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 4e06b2d9640 chntpw: new port
</span>4e06b2d9640 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 4e06b2d96409322eca283dfc8287a29e0e15172e
</span>Author: Mark Mentovai <mark@mentovai.com>
AuthorDate: Thu May 4 00:00:29 2023 -0400

<span style='display:block; white-space:pre;color:#404040;'>    chntpw: new port
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixed: https://trac.macports.org/ticket/66316
</span>---
 sysutils/chntpw/Portfile                           |  74 +++
 sysutils/chntpw/files/chntpw.8                     | 157 +++++++
 sysutils/chntpw/files/patch-Makefile.diff          |  24 +
 .../chntpw/files/patch-debian-04_get_abs_path.diff |  13 +
 .../patch-debian-06_correct_test_open_syscall.diff |  20 +
 ...atch-debian-07_detect_failure_to_write_key.diff |  20 +
 .../files/patch-debian-08_no_deref_null.diff       |  16 +
 .../files/patch-debian-09_improve_robustness.diff  |  56 +++
 .../files/patch-debian-10_remove_static.diff       |  22 +
 .../patch-debian-11_improve_documentation.diff     | 501 +++++++++++++++++++++
 .../files/patch-debian-12_readonly_filesystem.diff |  49 ++
 .../files/patch-debian-13_write_to_hive.diff       |  24 +
 .../files/patch-debian-14_improve_description.diff |  33 ++
 .../patch-debian-15_added_samunlock_binary.diff    | 291 ++++++++++++
 sysutils/chntpw/files/patch-warnings_64bit.diff    | 208 +++++++++
 sysutils/chntpw/files/reged.8                      | 120 +++++
 sysutils/chntpw/files/sampasswd.8                  | 120 +++++
 sysutils/chntpw/files/samunlock.8                  | 107 +++++
 sysutils/chntpw/files/samusrgrp.8                  | 130 ++++++
 19 files changed, 1985 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/Portfile b/sysutils/chntpw/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..334050a6dea
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,74 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem          1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name                chntpw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             140201
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories          sysutils
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         nomaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             GPL-2+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         Offline Windows NT password utility
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    chntpw is a utility to clear the password of any user that \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    has a valid local account on a Windows system. reged is a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    utility for interactive edits, exports, and imports of \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    Windows registry files. This package also contains the \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sampasswd, samunlock, and samusrgrp utilities for working \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    with Windows SAM user databases.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage            https://pogostick.net/~pnh/ntpasswd/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+master_sites        ${homepage}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+distfiles           ${name}-source-${version}.zip
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  3932e7184c20d9398d99b4864697307909395f20 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  96e20905443e24cba2f21e51162df71dd993a1c02bfa12b1be2d0801a4ee2ccc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    1404098
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_zip             yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# chntpw has not been updated since 2014. These Debian patches maintain the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# package, fixing several bugs and other correctness problems. They come from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://sources.debian.org/patches/chntpw/140201-1/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (https://sources.debian.org/data/main/c/chntpw/140201-1/debian/patches/). Of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the patches there, 02_upstream_documents, 03_keyname-overflow, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 05_control_empty_values do not apply, are not listed in the series file, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# are absent here. 01_port_to_gcrypt.patch has also been excluded: it adds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# libgcrypt as a cryptographic library as an alternative to OpenSSL, but the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# package is not built with any crypto enabled (here or in Debian) because its
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cryptographic features for changing (as opposed to clearing) passwords do not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# work properly with modern versions of Windows, and so the patch provides no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# benefit.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# patch-Makefile.diff and patch-warnings_64bit.diff are specific to MacPorts.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          patch-debian-04_get_abs_path.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-06_correct_test_open_syscall.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-07_detect_failure_to_write_key.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-08_no_deref_null.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-09_improve_robustness.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-10_remove_static.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-11_improve_documentation.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-12_readonly_filesystem.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-13_write_to_hive.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-14_improve_description.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-debian-15_added_samunlock_binary.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-Makefile.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-warnings_64bit.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args      -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_configure       no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.args          CC="${configure.cc}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    CFLAGS="${configure.cflags} [get_canonical_archflags cc]" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    LIBS=
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot.args       PREFIX=${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # man pages are from Debian,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://sources.debian.org/src/chntpw/140201-1/debian/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # (https://sources.debian.org/data/main/c/chntpw/140201-1/debian/).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file mkdir ${destroot}${prefix}/share/man/man8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file copy {*}[glob ${filespath}/*.8] ${destroot}${prefix}/share/man/man8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/chntpw.8 b/sysutils/chntpw/files/chntpw.8
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..f92440bfae5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/chntpw.8
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,157 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"                                      Hey, EMACS: -*- nroff -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" First parameter, NAME, should be all caps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" other parameters are allowed: see man(7), man(1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TH CHNTPW 8  "13th March 2010"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Please adjust this date whenever revising the manpage.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Some roff macros, for reference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nh        disable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .hy        enable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad l      left justify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad b      justify to both left and right margins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nf        disable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .fi        enable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .br        insert line break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .sp <n>    insert n+1 empty lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" for manpage-specific macros, see man(7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH NAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+chntpw \- utility to overwrite passwords of Windows systems
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SYNOPSIS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI < samfile > 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ systemfile ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ securityfile ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ otherreghive ] 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [...]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH DESCRIPTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page documents briefly the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written for the Debian distribution
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+because the original program does not have a manual page.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.PP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is a utility to view some information and reset user passwords 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+in a Windows NT/2000 SAM userdatabase file used by Microsoft Windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Operating System (in NT3.x and later versions). This file is usually located at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\\WINDOWS\\system32\\config\\SAM on the Windows file system. It is not necessary to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+know the previous passwords to reset them.  In addition it contains a simple
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+registry editor and  ahex-editor with which the information contained in a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+registry file can be browsed and modified.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program should be able to handle both 32 and 64 bit Microsoft Windows and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+all versions from NT3.x up to Win8.1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH OPTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Show a summary of options.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-u username
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Username or username ID (RID) to change. The default is 'Administrator'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-l
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+List all users in the SAM database and exit.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-i
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Interactive Menu system: list all users (as per \-l option) and then ask for the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+user to change.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-e
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Registry editor with limited capabilities (but it does include write support). For a 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+slightly more powerful editor see 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use buffer debugger instead (hex editor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Log all changed filenames to /tmp/changed. When this option is set the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+program automatically saves the changes in the hive files without prompting the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Be careful when using the \fB-L\fR option as a root user in a multiuser system.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The filename is fixed and this can be used by malicious users (dropping a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+symlink with the same name) to overwrite system files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-N
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not allocate more information, only allow the editing of existing values
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+with same size.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-E
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not expand the hive file (safe mode).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print verbose information and debug messages.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH EXAMPLES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B ntfs-3g /dev/sda1 /media/win ; cd /media/win/WINDOWS/system32/config/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Mount the Windows file system and enters the directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \\\\WINDOWS\\\\system32\\\\config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+where Windows stores the SAM database.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpw SAM system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Opens registry hives 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B SAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and change administrator account. This will work even if the name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+has been changed or it has been localized (since different language
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+versions of NT use different administrator names).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpw -l SAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Lists the users defined in the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B SAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+registry file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpw -u jabbathehutt SAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Prompts for password for 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B jabbathehutt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and changes it in the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B SAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+registry file, if found (otherwise do nothing).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH KNOWN BUGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program uses undocumented structures in the SAM database. Use with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+caution (i.e. make sure you make a backup of the file before any changes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+are done).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Password changing is only possible if the program has been specifically
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiled with some cryptographic functions. This feature, however, only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+works properly in Windows NT and Windows 2000 systems. It might not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+work properly in Windows XP, Vista, Win7, Win8 and later systems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+In the Debian distribution this feature is not enabled.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SEE ALSO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged, samusrgrp, sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+If you are looking for an automated procedure for password 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+recovery, you might want to check the bootdisks (can be used in CD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and USB drives) provided by the upstream author at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.BR http://pogostick.net/~pnh/ntpasswd/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+You will find more information available on how this program works, including
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+in-depth details on how the registry works, in the text files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH AUTHOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program was written by Petter N Hagen.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written by Javier Fernandez-Sanguino <jfs@debian.org>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+for the Debian GNU/Linux system (but may be used by others).
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-Makefile.diff b/sysutils/chntpw/files/patch-Makefile.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..fb597ff8baf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-Makefile.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -26,6 +26,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LIBS=-L$(OSSLLIB)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++PREFIX=/usr/local
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++INSTALL=install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ all: chntpw cpnt reged samusrgrp sampasswd samunlock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ chntpw: chntpw.o ntreg.o edlib.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -70,6 +74,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .c.o:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -c $(CFLAGS) $<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++install: all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  $(INSTALL) -m 0755 chntpw reged samusrgrp sampasswd samunlock $(DESTDIR)$(PREFIX)/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ clean:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   rm -f *.o chntpw cpnt reged samusrgrp sampasswd samunlock *~
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-04_get_abs_path.diff b/sysutils/chntpw/files/patch-debian-04_get_abs_path.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..0c9a71bbc5c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-04_get_abs_path.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Fix absolute path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Unknown
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1511,6 +1511,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   strncpy(tmp,path,ABSPATHLEN-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  tmp[ABSPATHLEN-1] = '\0';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (key->type & 0x20)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     keyname = mem_str(key->keyname, key->len_name);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-06_correct_test_open_syscall.diff b/sysutils/chntpw/files/patch-debian-06_correct_test_open_syscall.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..6f75dad39cb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-06_correct_test_open_syscall.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Fix code in source
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  Fix code that probably is never run since the existing code is totally bogus.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  The condition, !open(...), will almost always be true.  (sole exception is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  when starting a program with stdin initially closed)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Jim Meyering <meyering@redhat.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Last-Update: Mon, 20 Jul 2009 21:05:44 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4133,7 +4133,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if ( !(hdesc->state & HMODE_DIRTY)) return(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if ( !(hdesc->state & HMODE_OPEN)) { /* File has been closed */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!(hdesc->filedesc = open(hdesc->filename,O_RDWR))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if ((hdesc->filedesc = open(hdesc->filename,O_RDWR)) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       fprintf(stderr,"writeHive: open(%s) failed: %s, FILE NOT WRITTEN!\n",hdesc->filename,strerror(errno));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       return(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-07_detect_failure_to_write_key.diff b/sysutils/chntpw/files/patch-debian-07_detect_failure_to_write_key.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9bd72bdb378
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-07_detect_failure_to_write_key.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Detect stream write failure.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3493,7 +3493,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fprintf(file,"\r\n"); /* Must end file with an empty line, windows does that */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    fclose(file);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (ferror (file)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("failed to write file '%s'\n", filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fclose (file);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (fclose(file))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      printf("failed to write file '%s': %s\n", filename,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       strerror(errno));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* ================================================================ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-08_no_deref_null.diff b/sysutils/chntpw/files/patch-debian-08_no_deref_null.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ee05d411d69
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-08_no_deref_null.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Diagnose a missing hive file name with -e.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/reged.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/reged.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -167,6 +167,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (edit) {  /* Call editor. Rest of arguments are considered hives to load */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     hivename = argv[optind+no_hives];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!hivename) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      fprintf(stderr,"with -e you must specify at least one hive file name\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      usage();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      exit(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if (!(hive[no_hives] = openHive(hivename,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 HMODE_RW|mode))) {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-09_improve_robustness.diff b/sysutils/chntpw/files/patch-debian-09_improve_robustness.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a5839794a7d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-09_improve_robustness.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,56 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Fix issues in code
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The first two were spotted via inspection by Fedora team,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ the third one was added to address an error found using valgrind:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $ : > j && valgrind ./reged -e j
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       ~/w/co/chntpw: 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  ==16084==    by 0x4011E3: main (reged.c:103)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     get_abs_path: Not a 'nk' node!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * ntreg.c (fmyinput): Don't clobber ibuf[-1] upon NUL input.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * ntreg.c (convert_string): Don't segfault upon low memory.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * ntreg.c (openHive): Don't read uninitialized when file is too small.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Jim Meyering <meyering@redhat.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 20 Jul 2009 17:31:40 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -227,14 +227,18 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int fmyinput(char *prmpt, char *ibuf, int maxlen)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   int len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printf("%s",prmpt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fgets(ibuf,maxlen+1,stdin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   len = strlen(ibuf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   ibuf[strlen(ibuf)-1] = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   return(strlen(ibuf));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   if (len) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ibuf[len-1] = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      --len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   return len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Print len number of hexbytes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4250,6 +4254,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     closeHive(hdesc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return(NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (r < sizeof (*hdesc)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fprintf(stderr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "file is too small; got %d bytes while expecting %d or more\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      r, sizeof (*hdesc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    closeHive(hdesc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return(NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* Now run through file, tallying all pages */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* NOTE/KLUDGE: Assume first page starts at offset 0x1000 */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-10_remove_static.diff b/sysutils/chntpw/files/patch-debian-10_remove_static.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..5520022bd40
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-10_remove_static.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,22 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Do not build static files in the Makefile, they are not used in Debian.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Javier Fernandez-Sanguino <jfs@debian.org> for Debian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: not-needed, this patch is Debian-specific
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -12,7 +12,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LIBS=$(shell libgcrypt-config --libs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-all: chntpw chntpw.static cpnt reged reged.static samusrgrp samusrgrp.static sampasswd sampasswd.static
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++all: chntpw cpnt reged samusrgrp sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ chntpw: chntpw.o ntreg.o edlib.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) $(CFLAGS) -o chntpw chntpw.o ntreg.o edlib.o libsam.o $(LIBS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,5 +52,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -c $(CFLAGS) $<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ clean:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  rm -f *.o chntpw chntpw.static cpnt reged reged.static samusrgrp samusrgrp.static sampasswd sampasswd.static *~
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  rm -f *.o chntpw cpnt reged samusrgrp sampasswd *~
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-11_improve_documentation.diff b/sysutils/chntpw/files/patch-debian-11_improve_documentation.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..fe73fdfbc43
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-11_improve_documentation.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,501 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Fix spelling and grammar mistakes in documentation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Javier Fernandez-Sanguino <jfs@debian.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: NOT yet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Last-Update: 2014-08-07
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Copyright: This file is distributed with the same license as the chntpwd sources
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This patch is the result of reviewing (by a non-foreign speaker, oh! the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+irony!) the documentation provided by the upstream author in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the sources (text files).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+It tries to fix some grammar and spelling mistake, while trying not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+to add any new ones.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -15,14 +15,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SOFTWARE - HKEY_LOCAL_MACHINE\SOFTARE: Config and info of installed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            software and a lot of higher level windows config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Note that these programs (and the registry library they use) does not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-join all these files in the same tree like windows does.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Note that these programs (and the registry library they use) do not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++join all these files in the same tree like Windows does.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ For example, a path like
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is not valid, it is instead just
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ControSet001\Control
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (after selecting the hive if more than one is loaded)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-But except if you use the registry edit or export/import functions you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++But, unless you use the registry edit or export/import functions, you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do not need think about this as for other things the tools handle
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ this.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -49,65 +49,65 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- -u <user>   Username or RID (0x3e9 for example) to interactively edit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -u <user>   Username or RID (0x3e9 for example) to edit interactively
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Invoke the interactive edit menu on specified user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Specifying a user name will most likely fail if user has international
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-character, so better to use user ID (RID), for example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Invoke the interactive edit menu on the specified user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Specifying a user name will most likely fail if the username has international
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++characters, so itis better to use the user's ID (RID), for example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  chnptw -u 0x3e9 SAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-to edit user with hexadecimal RID 3e9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++to edit the user with hexadecimal RID 3e9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- -l          list all users in SAM file and exit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -l          list all users in the SAM file and exit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Just that, list users in human readable form, with some info about if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-user is admin and if password is set.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Just that, list all the users in human readable form, with some information
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++about the user, such as if the user is an administrator user and if the password is set.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  -i          Interactive Menu system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Invokes the menu system. Menu items will vary a bit depending on what
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ registry hives are loaded.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- -f          Interactively edit first admin user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -f          Interactively edit the first admin user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Select first admin user for edit. This is user with lowest RID that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-also is member of administators group, or built-in user 0x1f4 if not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-others possible.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Select the first admin user for edit. This is the user with the lowest RID that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++also is member of the administrators group, or the built-in user 0x1f4 if no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++other users are found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  -e          Registry editor. Now with full write support!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Enter the registry editor. It is a small command system. ? for help
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-there. See other documentation for more on regedits.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Enter the registry editor. It is a small command system. Press '?' for help
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++there. See other documentation for more information on regedits.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- -d          Enter buffer debugger instead (hex editor), 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -d          Enter the buffer debugger instead (hex editor), 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Command line type hex editor, mostly for debugging purposes. ? for help.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Command line type hex editor, mostly used for debugging purposes. ? for help.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- -v          Be a little more verbose (for debuging)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -v          Be a little more verbose (for debugging)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Lots of debug output during most operations (especially hive loading)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  -L          For scripts, write names of changed files to /tmp/changed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ If any of the other functions changes the registry, the changed files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-are listed here. Can be used by wrapper scripts to know what to save.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++are listed here. This option can be used by wrapper scripts to know what to save.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ My boot CD uses it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  -N          No allocation mode. Only same length overwrites possible (very safe mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Safe mode. Will only allow changes in registry that overwrites old
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-values with same length data. Password reset only changes 2 bytes, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-does not change value lenght, so password reset will still work in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Safe mode. This option will only allow changes in the registry that overwrite old
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++values with the same length data. Password reset only changes 2 bytes, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++does not change value length, so password resets will still work in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ this safe mode. If something tries to violate this safe mode, a lot of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-error messages (some of the rather obscure) may occur.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++error messages (some of them rather obscure) may be shown.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  -E          No expand mode, do not expand hive file (safe mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Safe mode. Does not allow expanding the size of the file, but will
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-allow adding keys/values as long as there is free space in the file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++allow adding keys/values as long as there is enough free space in the file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ already. (most files contains some free space)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ If expansion is needed but not allowed by this option,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-a lot of obscure error messages may occur, and file should not be saved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++a lot of obscure error messages may be show, and the file should not be saved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -155,10 +155,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   reged -x system HKEY_LOCAL_MACHINE\\SYSTEM ControlSet001 output.reg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-should export everything below ControlSet001 key from registry hive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-file named system into .reg file named output.reg, using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++should export everything below ControlSet001 key from the registry hive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++file named 'system' into the .reg file named 'output.reg', using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HKEY_LOCAL_MACHINE\SYSTEM in front of every key name in the .reg file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-(in most shells \\ is needed to ignore the meaning \ has to the shell)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++(in most shells \\ is needed to ignore the meaning '\' has to the shell)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   reged -x system HKEY_LOCAL_MACHINE\\SYSTEM ControlSet001\\Enum output.reg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -166,7 +166,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   reged -x system HKEY_LOCAL_MACHINE\\SYSTEM \\ output.reg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-export everything in the system file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++exports everything in the system file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -174,12 +174,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      Import from .reg file. Where <prefixstring> for example is HKEY_LOCAL_MACHINE\SOFTWARE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      Only one .reg and one hive file supported at the same time
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Reverse of -x, this reads from a .reg file and puts it into the hive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-file, just like regedit.exe foobar.reg will do in windows.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-The <prefixstring> is removed from the start of each key name, if you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This option is the opposite of -x: it reads from a .reg file and puts it into the hive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++file, just like 'regedit.exe foobar.reg' will do in Windows.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++The <prefixstring> is removed from the beginning of each key name, if you
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ specify this wrong, the result may not be what you expected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ KNOWN PROBLEM: This routine is slow, very slow indeed on binary values (has
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-hex numbers in .reg file). May take over 5 minutes to import a file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++hex numbers in .reg file). It may take over 5 minutes to import a file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ the size of a normal XP software-hive .reg export.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Problems / unusual things in the .reg file may cause crash or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unexpected data or some times even an error messsage! :)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -190,10 +190,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   -e <registryhive> ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      Interactive edit one or more of registry files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Enter the registry editor. It is a small command system. ? for help
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Enter the registry editor. This is a small command system. Press '?' for help
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ there. See other documentation for more on regedits.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-If both -I and -e given, editor will be entered after import, but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-before save, so you can check things if you need.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++If both -I and -e given, editor will be entered after importing, but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++before saving, so you can check things if you need.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  Options:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -292,12 +292,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ samusrgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is a command line tool to add users to groups or remove users from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-groups. Users and groups must be local (cannot be domain / AD).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++groups. Users and groups must be local (i.e. they cannot be domain / AD).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ It can also list the groups with their members in several forms, the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-output can be used in scripts of course.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++output can be used in scripts as it is provided in machine readable format.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Listing groups will also list domain users that are members of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-group (if any), but it will not be able to look up the name, so it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++group (if any), but it will not be able to look up the name, so they
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ will be listed as a SID only.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   samusrgrp version 0.2 130501, (c) Petter N Hagen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -310,7 +310,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      -L = list groups and also their members
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      -s = Print machine SID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-For add or remove, you must also specify a bit more info:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++To add or remove a user, you must also specify some more information:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Parameters:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      <user> can be given as a username or a RID in hex with 0x in front
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -356,9 +356,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Members name (if available, else SID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Members SID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-So in this example, the Guests group have 2 members: Administrator and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++So in this example, the Guests group has 2 members: Administrator and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Guest.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-At the time of writing this, it WILL NOT LIST EMPTY GROUPS (no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++At the time of writing this, it WILL NOT LIST EMPTY GROUPS (groups with no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ members). I plan to change this, empty groups on one line with -1 in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ member number field, and rest of user fields empty.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -429,7 +429,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ User RID (hex)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ User name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Is user admin? (1 = yes, 0 = no) (member of group ID 0x220)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Is the user an administrator? (1 = yes, 0 = no) (member of group ID 0x220)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Account flags, ACB (hex). See sam.h file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Password hash length. 14 = normal password. 0 or 4 = probably blank.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -441,58 +441,61 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Reset user :01f4:Administrator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Reset user :03e9:pnh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-which of course is :RID:username
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++which of course is in the format :RID:username
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Explanation on this:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      -r -f -> Reset password of admin user with lowest RID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               not counting built-in admin (0x1f4) unless it is the only admin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-All windows from NT3.1 up has a system created administrator account
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++All Windows systems, from version NT3.1 up, include a predefined administrator account
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with RID (user ID) 0x1f4 (500 decimal)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Before Windows XP the installer asked for a password for this account,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-and then it was used to login first after installation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-(Built-in guest account was also created by the installer, but it has
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Before Windows XP, the installer asked for a password for this account,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++and then it was used to login right after installation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++(The built-in 'Guest' account was also created by the installer, but it has
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ always been disabled by default)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-On Windows XP and newer systems, the installer also creates this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-account, but locks it down, it generally cannot be logged in. It is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-also not shown on the welcome screen (unless all other users are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++On Windows XP and newer Windows systems, the installer also creates this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++account, but it is locked down. It cannot be used to log in. It is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++also not shown on the 'Welcome' screen (unless all other users are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ deleted or disabled)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-The installer instead asks for a user to create during install. That
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Instead, the installer asks for a new user to create during the installation. That
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user is a normal non-hardwired user (RID > 0x3e8, 1000 decimal),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-and it is added to the built-in administrators group (group # 0x220). 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++and it is added to the built-in Administrators' group (group # 0x220). 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-It is users in the built-in group 0x220 that generally has full
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++The users in the built-in group 0x220 ('Administrators') generally have full
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ administrator rights to the machine.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-(XP installer can create several users, but only first gets group
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++(Note: XP installer can create several users, but only the first user gets group
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0x220)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-More users can of course be added from the control panel, and they can
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-be put into the 0x220 group if neccessary. From the "simplified"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-control panel dialog this is what happens if user is selected to be able to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-have full (or admin) access to the machine. If user is set to "normal"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-or something like that, it is not in the 0x220 group.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++More users can of course be added from the Control Panel, and they can
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++be added to the 0x220 group if neccessary. From the "simplified"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Control Panel dialog this is what happens if a user is selected and is configured to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++have full (or admin) access to the machine. If a user is set to "normal"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++or something like that, it will not be included in the 0x220 group.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ From the "Users and Groups" part of the administrative tools (not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-available on some home versions of windows) the group assignments and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++available on some Windows Home versions) the group assignments and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ other user info can be changed in more detail of course.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ From there, users in a domain (if machine is in domain) can also be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-added to the local 0x220 group, the domain user full access to that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-local machine even if the user is nothing special in the domain.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++added to the local 0x220 group. A domain user will have full access to that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++local machine even if the user is not included in any Domain Administrators'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++group.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Anyway..
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-On XP and newer, it is therefore not the hardwired 0x1f4 account that is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-used for admim. On home machines it is most often the first regular one (since
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-most people do not change any user stuff after the installer) or it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-could be any other user in the list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++On XP and newer Windows version, the hardwired 0x1f4 account is not used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++for administrative purposes. On home machines it is most often the first
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++regular user (since most people do not change any user stuff after the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++installation) or it could be any other user in the list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-So this reset function picks the first it finds over 0x3e8 (1000)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++So this reset function picks the first user it finds over 0x3e8 (1000)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ that is also in the 0x220 group. It will most likely work for 98% of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-home user machines :) Unless there are no users in the 0x220 group,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-then it picks the 0x1f4 hard-wired user (since it may be Windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++home user machines :) If there are no users in the 0x220 group,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++then it will pick the 0x1f4 hard-wired user (since the system may be Windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2000??????).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ This may of course be wrong if someone managed to remove all accounts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -502,7 +505,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Explanation on -a -r:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-The -r -a option will reset all users in the 0x220 group. Also user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++The -r -a option will reset all users in the 0x220 group. This includes user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0x1f4, which maybe is bad.. will consider changing this...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7,17 +7,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "ntreg" (the registry library) and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "libsam" (SAM manipulation library, user, groups etc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-is licensed under the GNU Lesser Public License. See LGPL.txt.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++are licensed under the GNU Lesser Public License. See LGPL.txt.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "chntpw" (the password reset / registry editor frontend)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "reged" (registry editor, export and import tool)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sampasswd" (password reset command line program)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "samusrgrp" (user and group command line program)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-is licensed under the GNU General Public License, see GPL.txt.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++are licensed under the GNU General Public License, see GPL.txt.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-For manual to the different commands, see MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Also, all have some help built in, just use the -h option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++For a manual of the different commands, plese see MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Also, all programs have some built-in help, just use the -h option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ See INSTALL.txt for compile instructions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -29,16 +29,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ At that site there's a floppy and a bootable CD that use chntpw to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ access the NT/2k/XP/Vista/Win7/Win8 system it is booted on to edit password etc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-The instructions below are for the standalone program itself, not the floppy.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++The instructions below are for the standalone program itself, not for the floppy.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ What does chntpw do?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ This little program will enable you to view some information and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-change user passwords, change user/group memberships
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-in a Windows (NT/XP/Vista/win7/win8) etc SAM userdatabase file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-You do not need to know the old passwords.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-However, you need to get at the registry files some way or another yourself.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++change user's passwords, change user/group's memberships
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++in a Windows (NT, XP, Vista, Win7, Win8, etc.) SAM userdatabase file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++You do not need to know the previous passwords.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++However, you need to access at the registry files some way or another yourself.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++For example, you can run this utility from a Live CD in a Windows computer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++and, after booting, mount the NTFS filesystem. Or remove the hard drive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++from the system and install it (e.g. using a USB hard-disk case) in a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Linux system where you have this tool installed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ In addition it contains a simple registry editor with full write support,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ and hex-editor which enables you to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fiddle around with bits&bytes in the file as you wish yourself.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -46,9 +53,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Also have registry import or export
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -----------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-"reged" is a program that can do import and export of .reg files into
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-the registry hive (binary) files. Also has an editor, but still
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-rudimentary text based command line type thing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++"reged" is a program that can import and export .reg files into
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++the registry hive (binary) files. It also has an editor, but it is still
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++a rudimentary text based command-line type of thing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ And by popular request
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Even have programs that can be used in scripts!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -65,41 +72,42 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ I often forget passwords. Especially on test installations (that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ I just _must_ have some stuff out of half a year later..)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-On most unix-based boxes you just boot the thingy off some kind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++On most Unix-based boxes you just boot the thingy off some kind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ of rescue bootmedia (cd/floppy etc), and simply edit the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ password file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ On Windows however, as far as I know, there is no way except reinstalling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ the userdatabase, losing all users except admin.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (ok, some companies let you pay lotsa $$$$$ for some rescue service..)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (ok, from Windows Vista or something you can make a password reset
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-file, but you have to remember to do that BEFORE you forget your password...)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++CD or USB, but you have to remember to do that BEFORE you forget your password...)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ How?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Currently, this thing only runs under linux, but it may just happen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Currently, this thing only runs under Linux, but it may just happen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ to compile on other platforms, too.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-So, to set a new adminpassword on your Windows installation you either:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++So, to set a new administrator's password on your Windows installation you either:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-1) Take the harddrive and mount it on a linux-box
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++1) Take the harddrive and mount it on a Linux box
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-2) Boot a "live" linux CD with full GUI (many available: Ubuntu,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++2) Boot a "live" Linux CD with full GUI (there are many available: Ubuntu,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Knoppix and more. Search for them)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-In both those cases, use the "chntpw.static" program found in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++In both those cases, you can use the "chntpw.static" program found in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "static" zip file on my website.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-3) Use my linux boot CD (or USB) at: http://pogostick.net/~pnh/ntpasswd/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++3) Use my Linux boot CD (or USB) avialable at: http://pogostick.net/~pnh/ntpasswd/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Usage:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-For manual to the different commands, see MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Also, all have some help built in, just use the -h option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++You will find a manual to the different commands in the  MANUAL.txt file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Also, all programs have some help built in, just use the -h option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Some old tech babble on how the password is stored
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,21 +116,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ A struct, called the V value of a key in the NT registry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ was suddenly somewhat documented through the pwdump utility
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-included in the unix Samba distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++included in the Unix Samba distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ This struct contains some info on a user of the NT machine,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ along with 2 crypted versions of the password associated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with the account.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ One password is the NT console login password,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-the other the LANMAN network share password
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++the other is the LANMAN network share password
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (which essentially is the first one in uppercase only,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- and no unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ and no Unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ This is how NT encrypts the passwords:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The logon cleartext password a user enters is:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-1) Converted to unicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-2) A MD4 hash is made out of the unicode string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++1) Converted to Unicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++2) A MD4 hash is made out of the Unicode string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3) Then the hash is crypted with DES, using the RID (lower
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    part of the SID, userid) as the crypt key.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    This is the so called "obfuscation" step, so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -134,7 +142,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1) Uppercased (and illegal characters probably removed)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    14 bytes max, if less the remaining bytes are zeroed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2) A known (constant) string is DES-encrypted
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-   using 7 first characters of the password as the key.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   using the 7 first characters of the password as the key.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Another constant is encrypted using the last 7 chars
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    as the key.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    The result of these two crypts are simply appended,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -142,13 +150,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3) The same obfuscation DES stage as 3 above.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 4) 16 bytes result put into the V struct.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Since the number of possible combinations in the lanman
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Since the number of possible combinations in the LANMAN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ password is relatively low compared to the other one,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ and it's easy to see if it's shorter than 8 chars or not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ it's used first in brute-force-crackers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-This program, however, don't care at all what the old
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-one is, it just overwrites it with the new one.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This program, however, does not care at all what the old
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++passowrd is, it just overwrites it with the new one.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Ok. So, how do we find and identify the V struct?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Yeah.. that was the hard part.. The files structure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -204,4 +212,4 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0x0035a8    80  REG_BINARY       <F>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0x003228   508  REG_BINARY       <V>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-For more techincal info, look it up in the source code.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++For more technical info, look it up in the source code.
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-12_readonly_filesystem.diff b/sysutils/chntpw/files/patch-debian-12_readonly_filesystem.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..c55af1bf75d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-12_readonly_filesystem.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,49 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Fix reading files in read-only filesystems
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ chntpw fails to read files from read-only filesystems, despite having some
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logic to handle this:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# chntpw -e /c/Windows/System32/config/SOFTWARE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+chntpw version 1.00 140201, (c) Petter N Hagen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+openHive(/c/Windows/System32/config/SOFTWARE) failed: Read-only file system, trying read-only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+openHive(): read error: : Read-only file system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+chntpw: Unable to open/read a hive, exiting..
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   This is due to using errno as an error checking mechanism; it should only be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   used when one knows a function has failed. This patch fixes this problem. It
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   also adds support for the non-fatal EINTR error, and fixes yet another bug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   where the last read size is used in a check instead of the whole file size.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Sam Hocevar <sam@hocevar.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=762508
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Index: chntpw-1.0/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+===================================================================
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- chntpw-1.0.orig/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ chntpw-1.0/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4241,9 +4241,9 @@ struct hive *openHive(char *filename, in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   do {  /* On some platforms read may not block, and read in chunks. handle that */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     r = read(hdesc->filedesc, hdesc->buffer + rt, hdesc->size - rt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     rt += r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  } while ( !errno && (rt < hdesc->size) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } while ( (r > 0 || (r < 0 && errno == EINTR)) && (rt < hdesc->size) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (errno) { 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (r < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     perror("openHive(): read error: ");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     closeHive(hdesc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return(NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4255,10 +4255,10 @@ struct hive *openHive(char *filename, in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return(NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (r < sizeof (*hdesc)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (rt < sizeof (*hdesc)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fprintf(stderr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "file is too small; got %d bytes while expecting %d or more\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      r, sizeof (*hdesc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      rt, sizeof (*hdesc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     closeHive(hdesc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return(NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-13_write_to_hive.diff b/sysutils/chntpw/files/patch-debian-13_write_to_hive.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..3562af05edf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-13_write_to_hive.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Write to the HIVE file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Enable the experimental function that writes to the HIVE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ the user password
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Patch available at: https://github.com/rescatux/chntpw/commit/dcab306dbf49ace2e38e6874ce46bef10ee604da
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803888
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Origin: other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Adrian Gibanel Lopez <adrian15sgd@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Javier Fernández-Sanguino
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sampasswd.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sampasswd.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -243,7 +243,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   wret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for (il = 0; il < no_hives; il++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    //    wret |= writeHive(hive[il]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    wret |= writeHive(hive[il]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (hive[il]->state & HMODE_DIDEXPAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       fprintf(stderr," WARNING: Registry file %s was expanded! Experimental! Use at own risk!\n",hive[il]->filename);  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     while (no_hives > 0)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-14_improve_description.diff b/sysutils/chntpw/files/patch-debian-14_improve_description.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..732d35f5ada
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-14_improve_description.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,33 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description:  Fix description and typos in the code 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Patches available at:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ https://github.com/rescatux/chntpw/commit/dc1c6edf135d9d628ab4230605bd778efd7c5dba?diff=unified
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ https://github.com/rescatux/chntpw/commit/684d32504e4875fcb647544cb83903b375f22505
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803883
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803884
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Origin: other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Adrian Gibanel Lopez <adrian15sgd@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Javier Fernández-Sanguino
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/sampasswd.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sampasswd.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,5 +1,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * sampasswd.c - SAM database, add or remove user in a group
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * sampasswd.c - SAM database, reset user password or account bits
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * Command line utility, non-interactive to reset user password and/or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * account bits for a user in the SAM database
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/samusrgrp.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/samusrgrp.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,7 +1,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * samusrgrp.c - SAM database, add or remove user in a group
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * Command line utility, non-inreractive to add or remove a user to/from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Command line utility, non-interactive to add or remove a user to/from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * a local group in the SAM database, list groups with memberships etc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * When run as:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-debian-15_added_samunlock_binary.diff b/sysutils/chntpw/files/patch-debian-15_added_samunlock_binary.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..3877931b4c8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-debian-15_added_samunlock_binary.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,291 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Description: Add samunlock binary 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The samunlock binary lets you unlock or list users.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ This command is suited for scripts and can be run also interactively
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Obtained from: https://github.com/rescatux/chntpw/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Forwarded: no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Origin: other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Author: Adrian Gibanel Lopez <adrian15sgd@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -12,7 +12,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LIBS=$(shell libgcrypt-config --libs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-all: chntpw cpnt reged samusrgrp sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++all: chntpw cpnt reged samusrgrp sampasswd samunlock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ chntpw: chntpw.o ntreg.o edlib.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) $(CFLAGS) -o chntpw chntpw.o ntreg.o edlib.o libsam.o $(LIBS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -41,6 +41,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sampasswd.static: sampasswd.o ntreg.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -static $(CFLAGS) -o sampasswd.static sampasswd.o ntreg.o libsam.o 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++samunlock: samunlock.o ntreg.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  $(CC) $(CFLAGS) -o samunlock samunlock.o ntreg.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++samunlock.static: samunlock.o ntreg.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  $(CC) -static $(CFLAGS) -o samunlock.static samunlock.o ntreg.o libsam.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ts: ts.o ntreg.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,5 +57,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -c $(CFLAGS) $<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ clean:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  rm -f *.o chntpw cpnt reged samusrgrp sampasswd *~
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  rm -f *.o chntpw cpnt reged samusrgrp sampasswd samunlock *~
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/samunlock.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,248 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * samunlock.c - SAM database, Unlock user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Command line utility, non-interactive to unlock a user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * in the SAM database
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Changes:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 2014 - oct: First version, some code from earlier sampasswd.c.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *****
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Copyright (c) 2014 Adrian Gibanel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * This program is free software; you can redistribute it and/or modify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * it under the terms of the GNU General Public License as published by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * the Free Software Foundation; version 2 of the License.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * This program is distributed in the hope that it will be useful,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * GNU General Public License for more details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * See file GPL.txt for the full license.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *****
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "ntreg.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "sam.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++const char samunlock_version[] = "samunlock version 0.1 141018, (c) Adrian Gibanel";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Global verbosity flag */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int gverbose = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Array of loaded hives */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MAX_HIVES 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct hive *hive[MAX_HIVES+1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int no_hives = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int H_SAM = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int do_unlock(char *user, int inrid, int verb)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int rid = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *resolvedname = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char s[200];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  unsigned short acb;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if ((H_SAM < 0) || (!user && !inrid) ) return(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (inrid) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    rid = inrid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (*user == '0' && *(user+1) == 'x') sscanf(user,"%i",&rid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!rid) { /* Look up username */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* Extract the unnamed value out of the username-key, value is RID  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    snprintf(s,180,"\\SAM\\Domains\\Account\\Users\\Names\\%s\\@",user);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    rid = get_dword(hive[H_SAM],0,s, TPF_VK_EXACT|TPF_VK_SHORT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (rid == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      printf("ERROR: User <%s> not found\n",user);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* At this point we have a RID, so get the real username it maps to just to show it */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  resolvedname = sam_get_username(hive[H_SAM], rid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!resolvedname) return(1);  /* RID lookup failed, no such user */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (gverbose) printf("do_unlock: Username: %s, RID = %d (0x%0x)\n",resolvedname,rid,rid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  acb = sam_handle_accountbits(hive[H_SAM], rid,2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = acb & 0x8000; /* ret != 0 means locked ; ret == 0 means unlocked */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!ret && verb) printf("Unlock user %s, RID = %d [0x%0x]\n",resolvedname,rid,rid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  FREE(resolvedname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return(ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void usage(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf(" [-U|-l] [-H] -u <user> <samhive>\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "Unlock user or list users in SAM database\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "Mode:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -U = Unlock user\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   -l = list users in sam\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "Parameters:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   <user> can be given as a username or a RID in hex with 0x in front\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   Example:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   -U -u theboss -> Unlocks user named 'theboss' if found\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   -U -u 0x3ea -> Unlocks user with RID 0x3ea (hex)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -U -f -> Unlocks admin user with lowest RID\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "            not counting built-in admin (0x1f4) unless it is the only admin\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   Usernames with international characters usually fails to be found,\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         "   please use RID number instead\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   If success, there will be no output, and exit code is 0\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "Options:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -H : For list: Human readable listing (default is parsable table)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -H : For unlock: Will output confirmation message if success\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -N : No allocate mode, only allow edit of existing values with same size\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -E : No expand mode, do not expand hive file (safe mode)\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -t : Debug trace of allocated blocks\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   "   -v : Some more verbose messages/debug\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int main(int argc, char **argv)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  extern int optind;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  extern char* optarg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int what = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int unlock = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int list = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int mode = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int human = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int adm = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int first = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int ret, wret, il;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *hivename;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *usr = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  char *options = "UlHu:vNEthaf";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  while((c=getopt(argc,argv,options)) > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    switch(c) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'U': unlock = 1; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'l': list  = 2; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'u': usr = optarg; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'f': first = 1; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'H': human = 1; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'v': mode |= HMODE_VERBOSE; gverbose = 1; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'N': mode |= HMODE_NOALLOC; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'E': mode |= HMODE_NOEXPAND; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 't': mode |= HMODE_TRACE; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case 'h': printf("%s\n%s ",samunlock_version,argv[0]); usage(); exit(0); break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default: printf("%s\n%s ",samunlock_version,argv[0]); usage(); exit(1); break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!unlock && !list && !what) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fprintf(stderr,"%s: ERROR: Mode -U or -l must be specified. -h for help\n",argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    exit(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 0   /* Should both be allowed at same time?? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (list && unlock) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fprintf(stderr,"%s: ERROR: Mode -U and -l impossible at the same time. -h for help\n",argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    exit(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (unlock && !first && (!usr || !*usr)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fprintf(stderr,"%s: ERROR: Need a user for unlock, -u must be specified.\n",argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    exit(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* Load hives. Only first SAM hive will be used however */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  hivename = argv[optind+no_hives];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!hivename || !*hivename) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fprintf(stderr,"%s: ERROR: You must specify a SAM registry hive filename.\n",argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    exit(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!(hive[no_hives] = openHive(hivename,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                              HMODE_RW|mode))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      fprintf(stderr,"%s: ERROR: Unable to open/read registry hive, cannot continue\n",argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      exit(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    switch(hive[no_hives]->type) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case HTYPE_SAM:      H_SAM = no_hives; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      // case HTYPE_SOFTWARE: H_SOF = no_hives; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      // case HTYPE_SYSTEM:   H_SYS = no_hives; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      // case HTYPE_SECURITY: H_SEC = no_hives; break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    no_hives++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    hivename = argv[optind+no_hives];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } while (hivename && *hivename && no_hives < MAX_HIVES);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (H_SAM == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fprintf(stderr,"%s: WARNING: Hive file does not look like SAM, but continuing anyway in case detection was wrong\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "%s: WARNING: If it really is not a SAM file you will get strange errors or bad results\n",argv[0],argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    H_SAM = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* Do logic */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (list) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    adm = sam_list_users(hive[H_SAM], human);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (gverbose) printf("   sam_list_users found admin to be 0x%x\n",adm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (unlock) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (first) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      adm = sam_list_users(hive[H_SAM], 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      if (!adm) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fprintf(stderr,"%s: ERROR: Unable to unlock, no admin users found\n",argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  //      printf("Resetting password of user with RID %x\n",adm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ret = do_unlock(usr, adm, human);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      ret = do_unlock(usr, 0, human);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      if (ret) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fprintf(stderr,"%s: ERROR: Failed to unlock %s\n",argv[0],usr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /* write registry hive (if needed) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  wret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (il = 0; il < no_hives; il++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    wret |= writeHive(hive[il]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (hive[il]->state & HMODE_DIDEXPAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      fprintf(stderr," WARNING: Registry file %s was expanded! Experimental! Use at own risk!\n",hive[il]->filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    while (no_hives > 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      closeHive(hive[--no_hives]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return(ret | wret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/patch-warnings_64bit.diff b/sysutils/chntpw/files/patch-warnings_64bit.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b145f4b0324
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/patch-warnings_64bit.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,208 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libsam.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libsam.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -511,7 +511,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      if (gverbose) printf("put_grp_members_sid: ajusted: mofs = %x, mlen = %x (%d)\n", mofs + 0x34 ,mlen,mlen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     if (gverbose) hexdump(&c->data, 0, c->len, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     if (gverbose) hexdump((void*)&c->data, 0, c->len, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Get total size of new SID data */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -528,7 +528,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     sidptr = &cd->data[mofs];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (i = 0; sarray[i].sidptr; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      if (gverbose) printf("  copying : %d len %x, at %x\n",i,sarray[i].len, sidptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      if (gverbose) printf("  copying : %d len %x, at %p\n",i,sarray[i].len, sidptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       str = sam_sid_to_string(sarray[i].sidptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if (gverbose) printf("  Member # %d = <%s>\n", i, str);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       FREE(str);      
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -539,7 +539,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     cd->members_len = sidlen;  /* Update member count in C struct */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     cd->grp_members = i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (gverbose) hexdump(&c->data, 0, c->len, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (gverbose) hexdump((void*)&c->data, 0, c->len, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!put_buf2val(hdesc, c, 0, g, 0, TPF_VK_EXACT)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       fprintf(stderr,"put_grp_members_sid: could not write back group info in value %s\n",g);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ntreg.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -543,27 +543,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define D_OFFS(o) ( (void *)&(key->o)-(void *)hdesc->buffer-vofs )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct nk_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   type              = 0x%02x %s\n", D_OFFS(type)  ,key->type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                             (key->type == KEY_ROOT ? "ROOT_KEY" : "") );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   timestamp skipped\n", D_OFFS(timestamp) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   parent key offset = 0x%0x\n", D_OFFS(ofs_parent) ,key->ofs_parent + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of subkeys = %d\n", D_OFFS(no_subkeys),key->no_subkeys);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   lf-record offset  = 0x%0x\n",D_OFFS(ofs_lf),key->ofs_lf + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of values  = %d\n", D_OFFS(no_values),key->no_values);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   val-list offset   = 0x%0x\n",D_OFFS(ofs_vallist),key->ofs_vallist + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   sk-record offset  = 0x%0x\n",D_OFFS(ofs_sk),key->ofs_sk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   classname offset  = 0x%0x\n",D_OFFS(ofs_classnam),key->ofs_classnam + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   type              = 0x%02x %s\n", D_OFFS(type)  ,key->type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                             (key->type == KEY_ROOT ? "ROOT_KEY" : "") );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   timestamp skipped\n", D_OFFS(timestamp) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   parent key offset = 0x%0x\n", D_OFFS(ofs_parent) ,key->ofs_parent + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of subkeys = %d\n", D_OFFS(no_subkeys),key->no_subkeys);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   lf-record offset  = 0x%0x\n",D_OFFS(ofs_lf),key->ofs_lf + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of values  = %d\n", D_OFFS(no_values),key->no_values);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   val-list offset   = 0x%0x\n",D_OFFS(ofs_vallist),key->ofs_vallist + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   sk-record offset  = 0x%0x\n",D_OFFS(ofs_sk),key->ofs_sk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   classname offset  = 0x%0x\n",D_OFFS(ofs_classnam),key->ofs_classnam + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   dummy3            = 0x%0x (%d)\n",D_OFFS(dummy3),key->dummy3,key->dummy3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   dummy4            = 0x%0x (%d)\n",D_OFFS(dummy4),key->dummy4,key->dummy4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   dummy5            = 0x%0x (%d)\n",D_OFFS(dummy5),key->dummy5,key->dummy5);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   dummy6            = 0x%0x (%d)\n",D_OFFS(dummy6),key->dummy6,key->dummy6);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   dummy7            = 0x%0x (%d)\n",D_OFFS(dummy7),key->dummy7,key->dummy7);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   dummy3            = 0x%0x (%d)\n",D_OFFS(dummy3),key->dummy3,key->dummy3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   dummy4            = 0x%0x (%d)\n",D_OFFS(dummy4),key->dummy4,key->dummy4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   dummy5            = 0x%0x (%d)\n",D_OFFS(dummy5),key->dummy5,key->dummy5);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   dummy6            = 0x%0x (%d)\n",D_OFFS(dummy6),key->dummy6,key->dummy6);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   dummy7            = 0x%0x (%d)\n",D_OFFS(dummy7),key->dummy7,key->dummy7);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   name length       = %d\n", D_OFFS(len_name),key->len_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   classname length  = %d\n", D_OFFS(len_classnam),key->len_classnam);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   name length       = %d\n", D_OFFS(len_name),key->len_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   classname length  = %d\n", D_OFFS(len_classnam),key->len_classnam);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Key name: <",D_OFFS(keyname) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Key name: <",D_OFFS(keyname) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(i = 0; i < key->len_name; i++) putchar(key->keyname[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf(">\n== End of key info.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -581,18 +581,18 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct vk_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   name length       = %d (0x%0x)\n", D_OFFS(len_name),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   name length       = %d (0x%0x)\n", D_OFFS(len_name),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                key->len_name, key->len_name  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   length of data    = %d (0x%0x)\n", D_OFFS(len_data),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   length of data    = %d (0x%0x)\n", D_OFFS(len_data),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                key->len_data, key->len_data  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   data offset       = 0x%0x\n",D_OFFS(ofs_data),key->ofs_data + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   value type        = 0x%0x  %s\n", D_OFFS(val_type), key->val_type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                 (key->val_type <= REG_MAX ? val_types[key->val_type] : "(unknown)") ) ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   flag              = 0x%0x\n",D_OFFS(flag),key->flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   *unused?*         = 0x%0x\n",D_OFFS(dummy1),key->dummy1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   data offset       = 0x%0x\n",D_OFFS(ofs_data),key->ofs_data + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   value type        = 0x%0x  %s\n", D_OFFS(val_type), key->val_type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  (key->val_type <= REG_MAX ? val_types[key->val_type] : "(unknown)") ) ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Key name: <",D_OFFS(keyname) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   flag              = 0x%0x\n",D_OFFS(flag),key->flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   *unused?*         = 0x%0x\n",D_OFFS(dummy1),key->dummy1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Key name: <",D_OFFS(keyname) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(i = 0; i < key->len_name; i++) putchar(key->keyname[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf(">\n== End of key info.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -610,13 +610,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf("== sk at offset %0x\n",vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct sk_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   *unused?*         = %d\n"   , D_OFFS(dummy1),     key->dummy1    );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Offset to prev sk = 0x%0x\n", D_OFFS(ofs_prevsk), key->ofs_prevsk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Offset to next sk = 0x%0x\n", D_OFFS(ofs_nextsk), key->ofs_nextsk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Usage counter     = %d (0x%0x)\n", D_OFFS(no_usage),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                              key->no_usage,key->no_usage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Security data len = %d (0x%0x)\n", D_OFFS(len_sk),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                              key->len_sk,key->len_sk);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   *unused?*         = %d\n"   , D_OFFS(dummy1),     key->dummy1    );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Offset to prev sk = 0x%0x\n", D_OFFS(ofs_prevsk), key->ofs_prevsk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Offset to next sk = 0x%0x\n", D_OFFS(ofs_nextsk), key->ofs_nextsk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Usage counter     = %d (0x%0x)\n", D_OFFS(no_usage),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                               key->no_usage,key->no_usage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Security data len = %d (0x%0x)\n", D_OFFS(len_sk),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                               key->len_sk,key->len_sk);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf("== End of key info.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -634,10 +634,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf("== lf at offset %0x\n",vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct lf_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of keys    = %d\n", D_OFFS(no_keys), key->no_keys  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of keys    = %d\n", D_OFFS(no_keys), key->no_keys  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(i = 0; i < key->no_keys; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    printf("%04x      %3d   Offset: 0x%0x  - <%c%c%c%c>\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    printf("%04tx      %3d   Offset: 0x%0x  - <%c%c%c%c>\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      D_OFFS(hash[i].ofs_nk), i,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      key->hash[i].ofs_nk + 0x1000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            key->hash[i].name[0],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -662,10 +662,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf("== lh at offset %0x\n",vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct lf_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of keys    = %d\n", D_OFFS(no_keys), key->no_keys  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of keys    = %d\n", D_OFFS(no_keys), key->no_keys  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(i = 0; i < key->no_keys; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    printf("%04x      %3d   Offset: 0x%0x  - <hash: %08x>\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    printf("%04tx      %3d   Offset: 0x%0x  - <hash: %08x>\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      D_OFFS(lh_hash[i].ofs_nk), i,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      key->lh_hash[i].ofs_nk + 0x1000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            key->lh_hash[i].hash );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -689,10 +689,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* #define D_OFFS(o) ( (void *)&(key->o)-(void *)hdesc->buffer-vofs ) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct li_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of keys    = %d\n", D_OFFS(no_keys), key->no_keys  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of keys    = %d\n", D_OFFS(no_keys), key->no_keys  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(i = 0; i < key->no_keys; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    printf("%04x      %3d   Offset: 0x%0x\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    printf("%04tx      %3d   Offset: 0x%0x\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      D_OFFS(hash[i].ofs_nk), i,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      key->hash[i].ofs_nk + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -714,10 +714,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   /* #define D_OFFS(o) ( (void *)&(key->o)-(void *)hdesc->buffer-vofs ) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct ri_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of subindices = %d\n", D_OFFS(no_lis), key->no_lis  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of subindices = %d\n", D_OFFS(no_lis), key->no_lis  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for(i = 0; i < key->no_lis; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    printf("%04x      %3d   Offset: 0x%0x\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    printf("%04tx      %3d   Offset: 0x%0x\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      D_OFFS(hash[i].ofs_li), i,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      key->hash[i].ofs_li + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -736,9 +736,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   printf("== db at offset %0x\n",vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   key = (struct db_key *)(hdesc->buffer + vofs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   number of parts    = %d\n", D_OFFS(no_part), key->no_part  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   number of parts    = %d\n", D_OFFS(no_part), key->no_part  );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  printf("%04x   Data list at offset: 0x%0x\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  printf("%04tx   Data list at offset: 0x%0x\n", 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      D_OFFS(ofs_data),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      key->ofs_data + 0x1000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2152,7 +2152,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } else { /* 4 bytes or less are inlined */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    datablk = vkofs + (int32_t)&(vkkey->ofs_data) - (int32_t)vkkey;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    datablk = vkofs + ((void*)&(vkkey->ofs_data) - (void*)vkkey);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     size |= 0x80000000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4257,7 +4257,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (rt < sizeof (*hdesc)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fprintf(stderr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      "file is too small; got %d bytes while expecting %d or more\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "file is too small; got %d bytes while expecting %zu or more\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       rt, sizeof (*hdesc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     closeHive(hdesc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return(NULL);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/reged.8 b/sysutils/chntpw/files/reged.8
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..36ecff4dca1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/reged.8
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,120 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"                                      Hey, EMACS: -*- nroff -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" First parameter, NAME, should be all caps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" other parameters are allowed: see man(7), man(1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TH REGED 8  "6th August 2014"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Please adjust this date whenever revising the manpage.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Some roff macros, for reference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nh        disable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .hy        enable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad l      left justify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad b      justify to both left and right margins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nf        disable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .fi        enable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .br        insert line break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .sp <n>    insert n+1 empty lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" for manpage-specific macros, see man(7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH NAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+reged \- utility to export/import and edit a Windows registry hives
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SYNOPSIS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI -x <registryhivefile> <prefixstring> <key> <output.reg>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI -I <registryhivefile> <prefixstring> <input.reg>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI -e  <registryhivefile>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH DESCRIPTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page documents briefly the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written for the Debian distribution
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+because the original program does not have a manual page.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.PP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B reged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is the an interactive command line utility that can be used to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+export, import or edit a Microsoft Windows registry hive.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH OPTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Show summary of options.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-x <registryhivefile> <prefixstring> <key> <output.reg>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Export parts of a hive file to a text registry (.reg)  file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Prefixstring indicates the part of the registry hive to dump (for example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+HKEY_LOCAL_MACHINE\\SOFTWARE). The <key> parameter defines the key to dump
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(recursively). You can use \\ or \\\\ to list all the keys in the hive file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Only one hive file and one .reg file can be defined.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-I <registryhivefile> <prefixstring> <input.reg>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Import the content of the input.reg file into the registry file.  The value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<prefixstring> can be any valid prefix, for example is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+HKEY_LOCAL_MACHINE\\SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Only one .reg and one hive file supported at the same time
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-e <registryhive> ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Interactive edit one or more registry files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Log all changed filenames to /tmp/changed. When this option is set the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+program automatically saves the changes in the hive files without prompting the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Be careful when using the \fB-L\fR option as a root user in a multiuser system. 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The filename is fixed and this can be used by malicious users (dropping a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+symlink with the same name) to overwrite system files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-C
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Automatically save all changes. Do not prompt the user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-N
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not allocate more information, only allow the editing of existing values with same size.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-E
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not expand the hive file (safe mode).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print debug information of allocated blocks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print verbose information and debug messages.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH KNOWN BUGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+There are many \fBunknown\fR bugs. If you find bugs please report them to the author.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SEE ALSO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpwd, samusrgrp, sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+You will find  more information available on how this program works, in the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+text files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH AUTHOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program was written by Petter N Hagen.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written by Javier Fernandez-Sanguino <jfs@debian.org>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+for the Debian GNU/Linux system (but may be used by others).
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/sampasswd.8 b/sysutils/chntpw/files/sampasswd.8
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..78257c25942
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/sampasswd.8
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,120 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"                                      Hey, EMACS: -*- nroff -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" First parameter, NAME, should be all caps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" other parameters are allowed: see man(7), man(1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TH SAMPASSWD 8  "6th August 2014"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Please adjust this date whenever revising the manpage.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Some roff macros, for reference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nh        disable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .hy        enable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad l      left justify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad b      justify to both left and right margins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nf        disable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .fi        enable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .br        insert line break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .sp <n>    insert n+1 empty lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" for manpage-specific macros, see man(7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH NAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sampasswd \- reset passwords of users in the SAM user database
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SYNOPSIS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI -u user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI < samfile > 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH DESCRIPTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page documents briefly the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written for the Debian distribution
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+because the original program does not have a manual page.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.PP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is a non-interactive command line utility that can reset a user's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+password and/or the user's account bits from the SAM user database file of a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Microsoft Windows system (Windows NT, 2000, XP, Vista, 7, 8.1, etc.).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This file is usually located at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\\WINDOWS\\system32\\config\\SAM on the file system of a Microsoft Windows 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Operating System
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+On success, the program does not output any informatin and the exit code is 0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH OPTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Show summary of options.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-r
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reset the user's password.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reset all the users. If this option is used there is no need to specify the next option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-u <user>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+User to change. The user value can be provided as a username, or a RID number in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+hexadecimal (if the username is preceded with '0x'). Usernames including
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+international characters will probably not work.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-l
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Lists the users in the SAM database.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Output human readable output. The program by default will print a parsable table unless
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+this option is used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-N
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not allocate more information, only allow the editing of existing values with same size.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-E
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not expand the hive file (safe mode).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print debug information of allocated blocks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print verbose information and debug messages.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH EXAMPLES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B sampasswd -r -u theboss
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reset the password of a user named 'theboss', if found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B sampasswd -r -u 0x3ea
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reset the password of the user with RID '0x3a'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp -r -a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reset the password of all the users in the Administrator's group (0x220)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp -r -f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reset the password of the administrative users with the lowest RID number.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This does not include the built-in administrator (0x1f4) unless no other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+administrative user can be found in the database file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH KNOWN BUGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+If the username includes international (non-ASCII) characters the program
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+will not (usually) find it. Use the RID number instead.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SEE ALSO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpwd, reged, samusrgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+You will find  more information available on how this program works, in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+text files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+More documentation is available at the upstream's author site:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.BR http://pogostick.net/~pnh/ntpasswd/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH AUTHOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program was written by Petter N Hagen.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written by Javier Fernandez-Sanguino <jfs@debian.org>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+for the Debian GNU/Linux system (but may be used by others).
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/samunlock.8 b/sysutils/chntpw/files/samunlock.8
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..6a85107cac2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/samunlock.8
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,107 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"                                      Hey, EMACS: -*- nroff -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" First parameter, NAME, should be all caps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" other parameters are allowed: see man(7), man(1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TH SAMUNLOCK 8  "6th December 2017"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Please adjust this date whenever revising the manpage.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Some roff macros, for reference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nh        disable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .hy        enable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad l      left justify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad b      justify to both left and right margins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nf        disable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .fi        enable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .br        insert line break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .sp <n>    insert n+1 empty lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" for manpage-specific macros, see man(7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH NAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+samunlock \- unlock users in the SAM user database
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SYNOPSIS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samunlock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI -u user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI < samfile > 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH DESCRIPTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page documents briefly the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samunlock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.PP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samunlock
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is a non-interactive command line utility that can unlock a user
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and/or the user's account bits from the SAM user database file of a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Microsoft Windows system (Windows NT, 2000, XP, Vista, 7, 8.1, etc.).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This file is usually located at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\\WINDOWS\\system32\\config\\SAM on the file system of a Microsoft Windows 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Operating System
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+On success, the program does not output any informatin and the exit code is 0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH OPTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Show summary of options.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-U
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Unlock the user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Unlock all the users. If this option is used there is no need to specify the next option.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-u <user>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+User to unlock. The user value can be provided as a username, or a RID number in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+hexadecimal (if the username is preceded with '0x'). Usernames including
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+international characters will probably not work.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-l
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Lists the users in the SAM database.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Output human readable output. The program by default will print a parsable table unless
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+this option is used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-N
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not allocate more information, only allow the editing of existing values with same size.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-E
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not expand the hive file (safe mode).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print debug information of allocated blocks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print verbose information and debug messages.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH EXAMPLES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samunlock -U -u theboss
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Unlock an user named 'theboss', if found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samunlock -U -u 0x3ea
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Unlock an user with RID '0x3a'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH KNOWN BUGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+If the username includes international (non-ASCII) characters the program
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+will not (usually) find it. Use the RID number instead.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SEE ALSO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpwd, reged, samusrgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+You will find  more information available on how this program works, in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+text files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+More documentation is available at the non upstream's author site:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.BR https://github.com/rescatux/chntpw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH AUTHOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program was written by Adrian Gibanel Lopez.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written by Adrian Gibanel Lopez <adrian15sgd@gmail.com>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+for the Debian GNU/Linux system (but may be used by others).
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/chntpw/files/samusrgrp.8 b/sysutils/chntpw/files/samusrgrp.8
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..773448bb321
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/chntpw/files/samusrgrp.8
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,130 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"                                      Hey, EMACS: -*- nroff -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" First parameter, NAME, should be all caps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" other parameters are allowed: see man(7), man(1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TH SAMUSRGRP 8  "6th August 2014"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Please adjust this date whenever revising the manpage.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Some roff macros, for reference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nh        disable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .hy        enable hyphenation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad l      left justify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .ad b      justify to both left and right margins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .nf        disable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .fi        enable filling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .br        insert line break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" .sp <n>    insert n+1 empty lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" for manpage-specific macros, see man(7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH NAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+samusrgrp \- add or remove users from groups in SAM database files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SYNOPSIS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI [ options ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.RI < samfile > 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH DESCRIPTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page documents briefly the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written for the Debian distribution
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+because the original program does not have a manual page.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.PP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is a non-interactive command line utility that can add or remove
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a user from a local group that exists in the SAM user database of a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Microsoft Windows system (Windows NT, 2000, XP, Vista, 7, 8.1, etc.).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This file is usually located at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\\WINDOWS\\system32\\config\\SAM on the file system of a Microsoft Windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Operating System
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+On success, the program does not output any informatin and the exit code is 0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The binary program supports multiple names. If it is called named
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrtogrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+it will assume \fB-a\fR mode (add user). If it is called named
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrfromgrp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+it will assume \fB-r\fR mode (remove user).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH OPTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Show summary of options.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The user is added to the group.  This option has to be followed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+by \-u and \-g .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-r
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The user is removed from the group.  This option has to be followed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+by \-u and \-g .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-u <user>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+User to change. The user value can be provided as a username, or a RID number in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+hexadecimal (if the username is preceded with '0x'). Usernames including
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+international characters will probably not work.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-g <group>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Group to change. The group can only be given as a group number, in hexadecimal, preceded with 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+with '0x'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-l
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Lists the groups in the SAM database.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Lists the groups in the SAM database as well as their members.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print the machine SID.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Output human readable output. The program by default will print a parsable table unless
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+this option is used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-N
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not allocate more information, only allow the editing of existing values
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+with same size.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-E
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Do not expand the hive file (safe mode).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print debug information of allocated blocks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B \-v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Print verbose information and debug messages.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH EXAMPLES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp -a -u theboss -g 0x220 SAMFILE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Adds a user named 'theboss' to the group 0x220 (Administrators)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp -a -u 0x3ea -g 0x221 SAMFILE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Adds a user with the id '0x3aa' to the group 0x221 (Users)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B samusrgrp -r -u 0x3ff -g 0x221 SAMFILE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Remove a user with the id '0x3ff' from the group 0x221 (Users)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH KNOWN BUGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+If the username includes international (non-ASCII) characters the program
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+will not (usually) find it. Use the RID number instead.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH SEE ALSO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.B chntpwd, reged, sampasswd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.br
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+You will find  more information available on how this program works, in the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+text files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/README.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.IR /usr/share/doc/chntpw/MANUAL.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+More documentation is available at the upstream's author site:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.BR http://pogostick.net/~pnh/ntpasswd/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.SH AUTHOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This program was written by Petter N Hagen.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This manual page was written by Javier Fernandez-Sanguino <jfs@debian.org>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+for the Debian GNU/Linux system (but may be used by others).
</span></pre><pre style='margin:0'>

</pre>