net: Add support for a credentials file
authorOlly Betts <olly@survex.com>
Tue, 1 May 2018 01:19:58 +0000 (13:19 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Fri, 30 Nov 2018 02:35:13 +0000 (03:35 +0100)
Add support for the same -A authfile/--authentication-file authfile
option that most of the other tools already do.

Signed-off-by: Olly Betts <olly@survex.com>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
docs-xml/manpages/net.8.xml
source3/utils/net.c

index 499fd4291deea42a69dc0110c6565fb3494e0815..37dfa2af6945591b2d0545d8481d739b6795495b 100644 (file)
@@ -26,6 +26,7 @@
                <arg choice="opt">-w|--workgroup workgroup</arg>
                <arg choice="opt">-W|--myworkgroup myworkgroup</arg>
                <arg choice="opt">-U|--user user</arg>
+               <arg choice="opt">-A|--authentication-file authfile</arg>
                <arg choice="opt">-I|--ipaddress ip-address</arg>
                <arg choice="opt">-p|--port port</arg>
                <arg choice="opt">-n myname</arg>
index e0776c8d82c6df16111989d431bfbb2a954ea9fa..769e6f86f8fe0847720104fcbb7a4f52c8f2fc06 100644 (file)
@@ -50,6 +50,7 @@
 #include "messages.h"
 #include "cmdline_contexts.h"
 #include "lib/gencache.h"
+#include "auth/credentials/credentials.h"
 
 #ifdef WITH_FAKE_KASERVER
 #include "utils/net_afs.h"
@@ -904,6 +905,26 @@ static struct functable net_func[] = {
 };
 
 
+static void get_credentials_file(struct net_context *c,
+                                const char *file)
+{
+       struct cli_credentials *cred = cli_credentials_init(c);
+
+       if (cred == NULL) {
+               d_printf("ERROR: Unable to allocate memory!\n");
+               exit(-1);
+       }
+
+       if (!cli_credentials_parse_file(cred, file, CRED_GUESS_FILE)) {
+               exit(-1);
+       }
+
+       c->opt_user_name = cli_credentials_get_username(cred);
+       c->opt_user_specified = (c->opt_user_name != NULL);
+       c->opt_password = cli_credentials_get_password(cred);
+       c->opt_target_workgroup = cli_credentials_get_domain(cred);
+}
+
 /****************************************************************************
   main program
 ****************************************************************************/
@@ -923,6 +944,7 @@ static struct functable net_func[] = {
                {"help",        'h', POPT_ARG_NONE,   0, 'h'},
                {"workgroup",   'w', POPT_ARG_STRING, &c->opt_target_workgroup},
                {"user",        'U', POPT_ARG_STRING, &c->opt_user_name, 'U'},
+               {"authentication-file", 'A', POPT_ARG_STRING, &c->opt_user_name, 'A', "Get the credentials from a file", "FILE"},
                {"ipaddress",   'I', POPT_ARG_STRING, 0,'I'},
                {"port",        'p', POPT_ARG_INT,    &c->opt_port},
                {"myname",      'n', POPT_ARG_STRING, &c->opt_requester_name},
@@ -1025,6 +1047,9 @@ static struct functable net_func[] = {
                                c->opt_password = p+1;
                        }
                        break;
+               case 'A':
+                       get_credentials_file(c, c->opt_user_name);
+                       break;
                default:
                        d_fprintf(stderr, _("\nInvalid option %s: %s\n"),
                                 poptBadOption(pc, 0), poptStrerror(opt));