summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/docbook/manpages/pdbedit.8.sgml26
-rw-r--r--source3/utils/pdbedit.c68
2 files changed, 55 insertions, 39 deletions
diff --git a/docs/docbook/manpages/pdbedit.8.sgml b/docs/docbook/manpages/pdbedit.8.sgml
index eeb1fb0d2c..3f6023d16f 100644
--- a/docs/docbook/manpages/pdbedit.8.sgml
+++ b/docs/docbook/manpages/pdbedit.8.sgml
@@ -27,7 +27,9 @@
<arg choice="opt">-a</arg>
<arg choice="opt">-m</arg>
<arg choice="opt">-x</arg>
- <arg choice="opt">-i file</arg>
+ <arg choice="opt">-i passdb-backend</arg>
+ <arg choice="opt">-e passdb-backend</arg>
+ <arg choice="opt">-D debuglevel</arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -233,18 +235,26 @@
<varlistentry>
- <term>-i file</term>
- <listitem><para>This command is used to import a smbpasswd
- file into the database.</para>
+ <term>-i passdb-backend</term>
+ <listitem><para>Use a different passdb backend to retrieve users than the one specified in smb.conf.</para>
- <para>This option will ease migration from the plain smbpasswd
- file database to more powerful backend databases like tdb and
- ldap.</para>
+ <para>This option will ease migration from one passdb backend to another.
+ </para>
- <para>Example: <command>pdbedit -i /etc/smbpasswd.old</command>
+ <para>Example: <command>pdbedit -i smbpasswd:/etc/smbpasswd.old -e tdbsam:/etc/samba/passwd.tdb</command>
</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>-e passdb-backend</term>
+ <listitem><para>Export all currently available users to the specified password database backend.</para>
+
+ <para>This option will ease migration from one passdb backend to another and will ease backupping</para>
+
+ <para>Example: <command>pdbedit -e smbpasswd:/root/samba-users.backup</command></para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
diff --git a/source3/utils/pdbedit.c b/source3/utils/pdbedit.c
index c63ed29529..2cbc9eb71d 100644
--- a/source3/utils/pdbedit.c
+++ b/source3/utils/pdbedit.c
@@ -394,24 +394,25 @@ static int delete_machine_entry (struct pdb_context *in, char *machinename)
int main (int argc, char **argv)
{
- struct pdb_context *in;
- BOOL list_users = False;
- BOOL verbose = False;
- BOOL spstyle = False;
- BOOL setparms = False;
- BOOL machine = False;
- BOOL add_user = False;
- BOOL delete_user = False;
- BOOL import = False;
+ static BOOL list_users = False;
+ static BOOL verbose = False;
+ static BOOL spstyle = False;
+ static BOOL setparms = False;
+ static BOOL machine = False;
+ static BOOL add_user = False;
+ static BOOL delete_user = False;
+ static BOOL import = False;
int opt;
- char *full_name = NULL;
- char *user_name = NULL;
- char *home_dir = NULL;
- char *home_drive = NULL;
- char *backend_in = NULL;
- char *backend_out = NULL;
- char *logon_script = NULL;
- char *profile_path = NULL;
+ static char *full_name = NULL;
+ static char *user_name = NULL;
+ static char *home_dir = NULL;
+ static char *home_drive = NULL;
+ static char *backend_in = NULL;
+ static char *backend_out = NULL;
+ static char *logon_script = NULL;
+ static char *profile_path = NULL;
+
+ struct pdb_context *in;
poptContext pc;
struct poptOption long_options[] = {
POPT_AUTOHELP
@@ -432,14 +433,14 @@ int main (int argc, char **argv)
{"debuglevel",'D',POPT_ARG_INT,&DEBUGLEVEL,0,"set debuglevel",NULL},
{0,0,0,0}
};
-
+
DEBUGLEVEL = 1;
setup_logging("pdbedit", True);
AllowDebugChange = False;
-
+
if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
fprintf(stderr, "Can't load %s - run testparm to debug it\n",
- dyn_CONFIGFILE);
+ dyn_CONFIGFILE);
exit(1);
}
@@ -456,7 +457,7 @@ int main (int argc, char **argv)
fprintf (stderr, "Incompatible options on command line!\n");
exit(1);
}
-
+
if(!NT_STATUS_IS_OK(make_pdb_context_name(&in, backend_in))){
fprintf(stderr, "Can't initialize %s.\n", backend_in);
@@ -471,7 +472,9 @@ int main (int argc, char **argv)
if (machine)
return new_machine (in, user_name);
else
- return new_user (in, user_name, full_name, home_dir, home_drive, logon_script, profile_path);
+ return new_user (in, user_name, full_name, home_dir,
+ home_drive, logon_script,
+ profile_path);
}
if (delete_user) {
@@ -484,16 +487,17 @@ int main (int argc, char **argv)
else
return delete_user_entry (in, user_name);
}
-
+
if (user_name) {
if (setparms)
- return set_user_info (in, user_name, full_name,
- home_dir,
- home_drive,
- logon_script,
- profile_path);
+ return set_user_info (in, user_name, full_name,
+ home_dir,
+ home_drive,
+ logon_script,
+ profile_path);
else
- return print_user_info (in, user_name, verbose, spstyle);
+ return print_user_info (in, user_name, verbose,
+ spstyle);
}
if (list_users)
@@ -501,8 +505,10 @@ int main (int argc, char **argv)
if (backend_out)
return export_database(in, backend_out);
-
+
poptPrintHelp(pc, stderr, 0);
-
+
return 1;
}
+
+