r23792: convert Samba4 to GPLv3
[samba.git] / source4 / lib / cmdline / popt_common.c
index b8f8a675eb8099efd3f203d4d775a7c6f52ebe68..904a8738925fc816a711f89ed61233fe0702ab07 100644 (file)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
 #include "version.h"
-#include "dynconfig.h"
-#include "system/filesys.h"
-#include "system/passwd.h"
 #include "lib/cmdline/popt_common.h"
 
 /* Handle command line options:
  *             -l,--log-base
  *             -n,--netbios-name
  *             -W,--workgroup
+ *             --realm
  *             -i,--scope
  */
 
-enum {OPT_OPTION=1,OPT_LEAK_REPORT,OPT_LEAK_REPORT_FULL, OPT_DEBUG_STDERR};
+enum {OPT_OPTION=1,OPT_LEAK_REPORT,OPT_LEAK_REPORT_FULL,OPT_DEBUG_STDERR};
 
 struct cli_credentials *cmdline_credentials = NULL;
 
@@ -48,12 +45,11 @@ static void popt_common_callback(poptContext con,
                           const char *arg, const void *data)
 {
        const char *pname;
-       
+
        if (reason == POPT_CALLBACK_REASON_POST) {
+               lp_load();
                /* Hook any 'every Samba program must do this, after
                 * the smb.conf is setup' functions here */
-               lp_load(dyn_CONFIGFILE);
-               load_interfaces();
                return;
        }
 
@@ -66,7 +62,16 @@ static void popt_common_callback(poptContext con,
                pname++;
 
        if (reason == POPT_CALLBACK_REASON_PRE) {
+               /* Hook for 'almost the first thing to do in a samba program' here */
+               /* setup for panics */
+               fault_setup(poptGetInvocationName(con));
+
+               /* and logging */
                setup_logging(pname, DEBUG_STDOUT);
+
+               if (getenv("SMB_CONF_PATH")) {
+                       lp_set_cmdline("config file", getenv("SMB_CONF_PATH"));
+               }
                return;
        }
 
@@ -92,21 +97,25 @@ static void popt_common_callback(poptContext con,
 
        case 's':
                if (arg) {
-                       pstrcpy(dyn_CONFIGFILE, arg);
+                       lp_set_cmdline("config file", arg);
                }
                break;
 
        case 'l':
                if (arg) {
-                       char *logfile = talloc_asprintf(NULL, "%s/log.%s", arg, pname);
-                       lp_set_cmdline("log file", logfile);
-                       talloc_free(logfile);
+                       char *new_logfile = talloc_asprintf(NULL, "%s/log.%s", arg, pname);
+                       lp_set_cmdline("log file", new_logfile);
+                       talloc_free(new_logfile);
                }
                break;
                
        case 'W':
                lp_set_cmdline("workgroup", arg);
                break;
+
+       case 'r':
+               lp_set_cmdline("realm", arg);
+               break;
                
        case 'n':
                lp_set_cmdline("netbios name", arg);
@@ -117,7 +126,7 @@ static void popt_common_callback(poptContext con,
                break;
 
        case 'm':
-               lp_set_cmdline("max protocol", arg);
+               lp_set_cmdline("client max protocol", arg);
                break;
 
        case 'R':
@@ -143,18 +152,19 @@ static void popt_common_callback(poptContext con,
 }
 
 struct poptOption popt_common_connection[] = {
-       { NULL, 0, POPT_ARG_CALLBACK, popt_common_callback },
+       { NULL, 0, POPT_ARG_CALLBACK, (void *)popt_common_callback },
        { "name-resolve", 'R', POPT_ARG_STRING, NULL, 'R', "Use these name resolution services only", "NAME-RESOLVE-ORDER" },
        { "socket-options", 'O', POPT_ARG_STRING, NULL, 'O', "socket options to use", "SOCKETOPTIONS" },
        { "netbiosname", 'n', POPT_ARG_STRING, NULL, 'n', "Primary netbios name", "NETBIOSNAME" },
        { "workgroup", 'W', POPT_ARG_STRING, NULL, 'W', "Set the workgroup name", "WORKGROUP" },
+       { "realm", 0, POPT_ARG_STRING, NULL, 'r', "Set the realm name", "REALM" },
        { "scope", 'i', POPT_ARG_STRING, NULL, 'i', "Use this Netbios scope", "SCOPE" },
        { "maxprotocol", 'm', POPT_ARG_STRING, NULL, 'm', "Set max protocol level", "MAXPROTOCOL" },
-       POPT_TABLEEND
+       { NULL }
 };
 
 struct poptOption popt_common_samba[] = {
-       { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, popt_common_callback },
+       { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, (void *)popt_common_callback },
        { "debuglevel",   'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" },
        { "debug-stderr", 0, POPT_ARG_NONE, NULL, OPT_DEBUG_STDERR, "Send debug output to STDERR", NULL },
        { "configfile",   's', POPT_ARG_STRING, NULL, 's', "Use alternative configuration file", "CONFIGFILE" },
@@ -162,95 +172,12 @@ struct poptOption popt_common_samba[] = {
        { "log-basename", 'l', POPT_ARG_STRING, NULL, 'l', "Basename for log/debug files", "LOGFILEBASE" },
        { "leak-report",     0, POPT_ARG_NONE, NULL, OPT_LEAK_REPORT, "enable talloc leak reporting on exit", NULL },   
        { "leak-report-full",0, POPT_ARG_NONE, NULL, OPT_LEAK_REPORT_FULL, "enable full talloc leak reporting on exit", NULL },
-       POPT_TABLEEND
+       { NULL }
 };
 
 struct poptOption popt_common_version[] = {
-       { NULL, 0, POPT_ARG_CALLBACK, popt_common_callback },
+       { NULL, 0, POPT_ARG_CALLBACK, (void *)popt_common_callback },
        { "version", 'V', POPT_ARG_NONE, NULL, 'V', "Print version" },
-       POPT_TABLEEND
+       { NULL }
 };
 
-/* Handle command line options:
- *             -U,--user
- *             -A,--authentication-file
- *             -k,--use-kerberos
- *             -N,--no-pass
- *             -S,--signing
- *      -P --machine-pass
- */
-
-
-static BOOL dont_ask = False;
-
-static void popt_common_credentials_callback(poptContext con, 
-                                               enum poptCallbackReason reason,
-                                               const struct poptOption *opt,
-                                               const char *arg, const void *data)
-{
-       if (reason == POPT_CALLBACK_REASON_PRE) {
-               cmdline_credentials = cli_credentials_init(talloc_autofree_context());
-               return;
-       }
-       
-       if (reason == POPT_CALLBACK_REASON_POST) {
-               cli_credentials_guess(cmdline_credentials);
-
-               if (!dont_ask) {
-                       cli_credentials_set_cmdline_callbacks(cmdline_credentials);
-               }
-               return;
-       }
-
-       switch(opt->val) {
-       case 'U':
-               {
-                       char *lp;
-
-                       cli_credentials_parse_string(cmdline_credentials, arg, CRED_SPECIFIED);
-
-                       if (cmdline_credentials->password && (lp=strchr_m(arg,'%'))) {
-                               memset(lp,0,strlen(cmdline_credentials->password));
-                       }
-               }
-               break;
-
-       case 'A':
-               cli_credentials_parse_file(cmdline_credentials, arg, CRED_SPECIFIED);
-               break;
-
-       case 'S':
-               lp_set_cmdline("client signing", arg);
-               break;
-
-       case 'P':
-               /* Later, after this is all over, get the machine account details from the secrets.ldb */
-               cli_credentials_set_machine_account_pending(cmdline_credentials);
-               
-               /* machine accounts only work with kerberos (fall though)*/
-
-       case 'k':
-#ifndef HAVE_KRB5
-               d_printf("No kerberos support compiled in\n");
-               exit(1);
-#else
-               lp_set_cmdline("gensec:krb5", "True");
-#endif
-               break;
-
-
-       }
-}
-
-
-
-struct poptOption popt_common_credentials[] = {
-       { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, popt_common_credentials_callback },
-       { "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "[DOMAIN\\]USERNAME[%PASSWORD]" },
-       { "no-pass", 'N', POPT_ARG_NONE, &dont_ask, True, "Don't ask for a password" },
-       { "kerberos", 'k', POPT_ARG_NONE, NULL, 'k', "Use kerberos (active directory) authentication" },
-       { "authentication-file", 'A', POPT_ARG_STRING, NULL, 'A', "Get the credentials from a file", "FILE" },
-       { "signing", 'S', POPT_ARG_STRING, NULL, 'S', "Set the client signing state", "on|off|required" },
-       { "machine-pass", 'P', POPT_ARG_NONE, NULL, 'P', "Use stored machine account password (implies -k)" },
-       POPT_TABLEEND
-};