static int save_reload(void) { FILE *f; f = fopen(servicesf,"w"); if (!f) { printf("failed to open %s for writing\n", servicesf); return 0; } fprintf(f, "# Samba config file created using wsmbconf\n"); lp_dump(f); fclose(f); lp_killunused(NULL); if (!lp_load(servicesf,False)) { printf("Can't reload %s\n", servicesf); return 0; } return 1; }
bool torture_libnetapi_init_context(struct torture_context *tctx, struct libnetapi_ctx **ctx_p) { NET_API_STATUS status; struct libnetapi_ctx *ctx; TALLOC_CTX *frame = talloc_stackframe(); if (!lp_load(lpcfg_configfile(tctx->lp_ctx), true, false, false, true)) { fprintf(stderr, "error loading %s\n", lpcfg_configfile(tctx->lp_ctx)); return W_ERROR_V(WERR_GENERAL_FAILURE); } init_names(); load_interfaces(); status = libnetapi_net_init(&ctx); if (status != 0) { talloc_free(frame); return false; } libnetapi_set_username(ctx, cli_credentials_get_username(cmdline_credentials)); libnetapi_set_password(ctx, cli_credentials_get_password(cmdline_credentials)); *ctx_p = ctx; talloc_free(frame); return true; }
static bool reload_nmbd_services(bool test) { bool ret; set_remote_machine_name("nmbd", False); if ( lp_loaded() ) { const char *fname = lp_configfile(); if (file_exist(fname) && !strcsequal(fname,get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); test = False; } } if ( test && !lp_file_list_changed() ) return(True); ret = lp_load(get_dyn_CONFIGFILE(), True , False, False, True); /* perhaps the config filename is now set */ if ( !test ) { DEBUG( 3, ( "services not loaded\n" ) ); reload_nmbd_services( True ); } return(ret); }
static BOOL reload_nmbd_services(BOOL test) { BOOL ret; set_remote_machine_name("nmbd", False); if ( lp_loaded() ) { pstring fname; pstrcpy( fname,lp_configfile()); if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) { pstrcpy(dyn_CONFIGFILE,fname); test = False; } } if ( test && !lp_file_list_changed() ) return(True); ret = lp_load( dyn_CONFIGFILE, True , False, False, True); /* perhaps the config filename is now set */ if ( !test ) { DEBUG( 3, ( "services not loaded\n" ) ); reload_nmbd_services( True ); } return(ret); }
int main(int argc, char *argv[]) { char *desthost; pstring configfile; setup_logging(argv[0],True); pstrcpy(configfile,dyn_CONFIGFILE); if (argc < 2) { fprintf(stderr,"smbfilter <desthost> <netbiosname>\n"); exit(1); } desthost = argv[1]; if (argc > 2) { netbiosname = argv[2]; } if (!lp_load(configfile,True,False,False,True)) { d_printf("Unable to load config file\n"); } start_filter(desthost); return 0; }
static bool reload_services_file(const char *lfile) { bool ret; if (lp_loaded()) { const char *fname = lp_configfile(); if (file_exist(fname) && !strcsequal(fname,get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); } } /* if this is a child, restore the logfile to the special name - <domain>, idmap, etc. */ if (lfile && *lfile) { lp_set_logfile(lfile); } reopen_logs(); ret = lp_load(get_dyn_CONFIGFILE(),False,False,True,True); reopen_logs(); load_interfaces(); return(ret); }
int main(int argc, char *argv[]) { int i, ret = 0; int count = 1; /* Needed to initialize character set */ lp_load("/dev/null", True, False, False, True); if (argc < 2) { fprintf(stderr, "usage: %s STRING1 [COUNT]\n" "Checks that a string translated UNIX->UCS2->UNIX is unchanged\n" "Should be always 0\n", argv[0]); return 2; } if (argc >= 3) count = atoi(argv[2]); for (i = 0; ((i < count) && (!ret)); i++) ret = check_push_ucs2(argv[1]); printf("%d\n", ret); return 0; }
/* load the smb.conf file into loadparm. */ static int load_config(void) { setuid(0); if (!lp_load(servicesf,False)) { printf("<b>Can't load %s - using defaults</b><p>\n", servicesf); } return 1; }
int main(int argc, char *argv[]) { pid_t pid; int i, n; static pstring servicesf = CONFIGFILE; char buf[12]; TimeInit(); setup_logging(argv[0],True); charset_initialise(); lp_load(servicesf,False,False,False); message_init(); if (argc != 3) { fprintf(stderr, "%s: Usage - %s pid count\n", argv[0], argv[0]); exit(1); } pid = atoi(argv[1]); n = atoi(argv[2]); message_register(MSG_PONG, pong_message); for (i=0;i<n;i++) { message_send_pid(pid, MSG_PING, NULL, 0, True); } while (pong_count < i) { message_dispatch(); msleep(1); } /* Now test that the duplicate filtering code works. */ pong_count = 0; safe_strcpy(buf, "1234567890", sizeof(buf)-1); for (i=0;i<n;i++) { message_send_pid(getpid(), MSG_PING, NULL, 0, False); message_send_pid(getpid(), MSG_PING, buf, 11, False); } for (i=0;i<n;i++) { message_dispatch(); msleep(1); } if (pong_count != 2) { fprintf(stderr, "Duplicate filter failed (%d).\n", pong_count); exit(1); } return (0); }
bool reload_services(struct smbd_server_connection *sconn, bool (*snumused) (struct smbd_server_connection *, int), bool test) { struct smbXsrv_connection *xconn = NULL; bool ret; if (sconn != NULL) { xconn = sconn->conn; } if (lp_loaded()) { char *fname = lp_next_configfile(talloc_tos()); if (file_exist(fname) && !strcsequal(fname, get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); test = False; } TALLOC_FREE(fname); } reopen_logs(); if (test && !lp_file_list_changed()) return(True); lp_killunused(sconn, snumused); ret = lp_load(get_dyn_CONFIGFILE(), false, /* global only */ false, /* save defaults */ true, /* add_ipc */ true); /* initialize globals */ /* perhaps the config filename is now set */ if (!test) { reload_services(sconn, snumused, true); } reopen_logs(); load_interfaces(); if (xconn != NULL) { set_socket_options(xconn->transport.sock, "SO_KEEPALIVE"); set_socket_options(xconn->transport.sock, lp_socket_options()); } mangle_reset_cache(); reset_stat_cache(); /* this forces service parameters to be flushed */ set_current_service(NULL,0,True); return(ret); }
static bool lp_load_for_s4_ctx(const char *filename) { TALLOC_CTX *mem_ctx; bool status; mem_ctx = talloc_stackframe(); status = lp_load(filename, false, false, false, false); talloc_free(mem_ctx); return status; }
int daemon_main(void) { extern char *config_file; extern int orig_umask; char *pid_file; if (is_a_socket(STDIN_FILENO)) { int i; /* we are running via inetd - close off stdout and stderr so that library functions (and getopt) don't try to use them. Redirect them to /dev/null */ for (i=1;i<3;i++) { close(i); open("/dev/null", O_RDWR); } set_nonblocking(STDIN_FILENO); return start_daemon(STDIN_FILENO); } become_daemon(); if (!lp_load(config_file, 1)) { fprintf(stderr,"failed to load config file %s\n", config_file); exit_cleanup(RERR_SYNTAX); } log_open(); rprintf(FINFO,"rsyncd version %s starting\n",VERSION); if (((pid_file = lp_pid_file()) != NULL) && (*pid_file != '\0')) { char pidbuf[16]; int fd; int pid = (int) getpid(); cleanup_set_pid(pid); if ((fd = do_open(lp_pid_file(), O_WRONLY|O_CREAT|O_TRUNC, 0666 & ~orig_umask)) == -1) { cleanup_set_pid(0); fprintf(stderr,"failed to create pid file %s\n", pid_file); exit_cleanup(RERR_FILEIO); } slprintf(pidbuf, sizeof(pidbuf), "%d\n", pid); write(fd, pidbuf, strlen(pidbuf)); close(fd); } start_accept_loop(rsync_port, start_daemon); return -1; }
/**************************************************************************** main program ****************************************************************************/ int main(int argc,char *argv[]) { struct poptOption long_options[] = { POPT_AUTOHELP { "broadcast", 'b', POPT_ARG_VAL, &use_bcast, True, "Use broadcast instead of using the master browser" }, { "domains", 'D', POPT_ARG_VAL, &level, LEV_WORKGROUP, "List only domains (workgroups) of tree" }, { "servers", 'S', POPT_ARG_VAL, &level, LEV_SERVER, "List domains(workgroups) and servers of tree" }, POPT_COMMON_SAMBA POPT_COMMON_CREDENTIALS POPT_TABLEEND }; poptContext pc; /* Initialise samba stuff */ load_case_tables(); setlinebuf(stdout); dbf = x_stderr; setup_logging(argv[0],True); pc = poptGetContext("smbtree", argc, (const char **)argv, long_options, POPT_CONTEXT_KEEP_FIRST); while(poptGetNextOpt(pc) != -1); poptFreeContext(pc); lp_load(dyn_CONFIGFILE,True,False,False,True); load_interfaces(); /* Parse command line args */ if (!cmdline_auth_info.got_pass) { char *pass = getpass("Password: "); if (pass) { pstrcpy(cmdline_auth_info.password, pass); } cmdline_auth_info.got_pass = True; } #ifdef ENABLE_LOCK sem_init(&SMBTREE_LOCK, 0, 1); #endif serverlist = XLinkedList_Create(); sharefolderlist = XLinkedList_Create(); smb_event_monitor_init(); smb_proc(); return 0; }
static void update_conf(struct tevent_context *ev, struct messaging_context *msg) { change_to_root_user(); lp_load(get_dyn_CONFIGFILE(), true, false, false, true); load_printers(ev, msg); spoolss_reopen_logs(spoolss_child_id); if (spoolss_child_id == 0) { pfh_daemon_config(DAEMON_NAME, &pf_spoolss_cfg, &default_pf_spoolss_cfg); pfh_manage_pool(ev, msg, &pf_spoolss_cfg, spoolss_pool); } }
int main(int argc, char **argv) { pstring servicesf = CONFIGFILE; /* Argument check */ if (argc == 1) { usage(); return 1; } /* Load smb.conf file */ charset_initialise(); if (!lp_load(servicesf,False,False,True)) { fprintf(stderr, "Couldn't load confiuration file %s\n", servicesf); return 1; } /* Do commands */ if (strcmp(argv[1], "setsec") == 0) { if (argc != 3) { usage(); return 1; } return psec_setsec(argv[2]); } if (strcmp(argv[1], "getsec") == 0) { if (argc != 3) { usage(); return 1; } return psec_getsec(argv[2]); } /* An unknown command */ printf("psec: unknown command %s\n", argv[1]); return 1; }
BOOL reload_services(BOOL test) { BOOL ret; if (lp_loaded()) { pstring fname; pstrcpy(fname,lp_configfile()); if (file_exist(fname, NULL) && !strcsequal(fname, dyn_CONFIGFILE)) { pstrcpy(dyn_CONFIGFILE, fname); test = False; } } reopen_logs(); if (test && !lp_file_list_changed()) return(True); lp_killunused(conn_snum_used); ret = lp_load(dyn_CONFIGFILE, False, False, True); load_printers(); /* perhaps the config filename is now set */ if (!test) reload_services(True); reopen_logs(); load_interfaces(); { if (smbd_server_fd() != -1) { set_socket_options(smbd_server_fd(),"SO_KEEPALIVE"); set_socket_options(smbd_server_fd(), user_socket_options); } } mangle_reset_cache(); reset_stat_cache(); /* this forces service parameters to be flushed */ set_current_service(NULL,True); return (ret); }
int main(int argc, const char *argv[]) { const char *config_file = get_dyn_CONFIGFILE(); const char *sequence = ""; poptContext pc; char *buff; TALLOC_CTX *ctx = talloc_stackframe(); struct poptOption long_options[] = { POPT_AUTOHELP POPT_COMMON_VERSION POPT_TABLEEND }; load_case_tables(); pc = poptGetContext(NULL, argc, argv, long_options, POPT_CONTEXT_KEEP_FIRST); poptSetOtherOptionHelp(pc, "[OPTION...] <sequence-string>"); while(poptGetNextOpt(pc) != -1); setup_logging(poptGetArg(pc), true); sequence = poptGetArg(pc); if (sequence == NULL) { fprintf(stderr, "ERROR: missing sequence string\n"); return 1; } dbf = x_stderr; DEBUGLEVEL = 0; AllowDebugChange = false; if (!lp_load(config_file,false,true,false,true)) { fprintf(stderr,"Error loading services.\n"); return 1; } while(next_token_talloc(ctx, &sequence, &buff, NULL)) { printf("[%s]\n", buff); } talloc_free(ctx); return 0; }
/* Load specified configuration file */ static NTSTATUS cmd_conf(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, const char **argv) { if (argc != 2) { printf("Usage: %s <smb.conf>\n", argv[0]); return NT_STATUS_OK; } if (!lp_load(argv[1], False, True, False)) { printf("Error loading \"%s\"\n", argv[1]); return NT_STATUS_OK; } printf("\"%s\" successfully loaded\n", argv[1]); return NT_STATUS_OK; }
bool reload_services(struct messaging_context *msg_ctx, int smb_sock, bool test) { bool ret; if (lp_loaded()) { char *fname = lp_configfile(); if (file_exist(fname) && !strcsequal(fname, get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); test = False; } TALLOC_FREE(fname); } reopen_logs(); if (test && !lp_file_list_changed()) return(True); lp_killunused(conn_snum_used); ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True); /* perhaps the config filename is now set */ if (!test) reload_services(msg_ctx, smb_sock, True); reopen_logs(); load_interfaces(); if (smb_sock != -1) { set_socket_options(smb_sock,"SO_KEEPALIVE"); set_socket_options(smb_sock, lp_socket_options()); } mangle_reset_cache(); reset_stat_cache(); /* this forces service parameters to be flushed */ set_current_service(NULL,0,True); return(ret); }
static void lsasd_sig_hup_handler(struct tevent_context *ev, struct tevent_signal *se, int signum, int count, void *siginfo, void *pvt) { change_to_root_user(); lp_load(get_dyn_CONFIGFILE(), true, false, false, true); lsasd_reopen_logs(lsasd_child_id); pfh_daemon_config(DAEMON_NAME, &pf_lsasd_cfg, &default_pf_lsasd_cfg); /* relay to all children */ prefork_send_signal_to_all(lsasd_pool, SIGHUP); }
/** * Initialize the Zenoss async event context. Will ensure that all * necessary Samba library initializtion takes place and that a root * event context for our local implementation is created. */ struct event_context* async_create_context(struct reactor_functions *funcs) { // load all Samba parameters lp_load(); // initialize the Samba DCERPC libraries dcerpc_init(); dcerpc_table_init(); dcom_proxy_IUnknown_init(); dcom_proxy_IWbemLevel1Login_init(); dcom_proxy_IWbemServices_init(); dcom_proxy_IEnumWbemClassObject_init(); dcom_proxy_IRemUnknown_init(); dcom_proxy_IWbemFetchSmartEnum_init(); dcom_proxy_IWbemWCOSmartEnum_init(); // and finally create our top-level event context return zenoss_event_context_init(NULL, funcs); }
static BOOL reload_services_file(void) { BOOL ret; if (lp_loaded()) { pstring fname; pstrcpy(fname,lp_configfile()); if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) { pstrcpy(dyn_CONFIGFILE,fname); } } reopen_logs(); ret = lp_load(dyn_CONFIGFILE,False,False,True); reopen_logs(); load_interfaces(); return(ret); }
NET_API_STATUS libnetapi_init(struct libnetapi_ctx **context) { NET_API_STATUS ret; TALLOC_CTX *frame; if (stat_ctx && libnetapi_initialized) { *context = stat_ctx; return NET_API_STATUS_SUCCESS; } #if 0 talloc_enable_leak_report(); #endif frame = talloc_stackframe(); /* Case tables must be loaded before any string comparisons occour */ load_case_tables_library(); /* When libnetapi is invoked from an application, it does not * want to be swamped with level 10 debug messages, even if * this has been set for the server in smb.conf */ lp_set_cmdline("log level", "0"); setup_logging("libnetapi", DEBUG_STDERR); if (!lp_load(get_dyn_CONFIGFILE(), true, false, false, true)) { TALLOC_FREE(frame); fprintf(stderr, "error loading %s\n", get_dyn_CONFIGFILE() ); return W_ERROR_V(WERR_GENERAL_FAILURE); } init_names(); load_interfaces(); reopen_logs(); BlockSignals(True, SIGPIPE); ret = libnetapi_net_init(context); TALLOC_FREE(frame); return ret; }
int main(int argc, const char **argv) { bool ret; poptContext pc; TALLOC_CTX *mem_ctx = talloc_stackframe(); struct poptOption long_options[] = { POPT_COMMON_SAMBA {0, 0, 0, 0} }; load_case_tables(); dbf = x_stderr; /* parse options */ pc = poptGetContext("smbconftort", argc, (const char **)argv, long_options, 0); while(poptGetNextOpt(pc) != -1) { } poptFreeContext(pc); ret = lp_load(get_dyn_CONFIGFILE(), true, /* globals_only */ false, /* save_defaults */ false, /* add_ipc */ true /* initialize globals */); if (!ret) { printf("failure: error loading the configuration\n"); goto done; } ret = torture_smbconf(); done: TALLOC_FREE(mem_ctx); return ret ? 0 : -1; }
static void lsasd_smb_conf_updated(struct messaging_context *msg, void *private_data, uint32_t msg_type, struct server_id server_id, DATA_BLOB *data) { struct tevent_context *ev_ctx; DEBUG(10, ("Got message saying smb.conf was updated. Reloading.\n")); ev_ctx = talloc_get_type_abort(private_data, struct tevent_context); change_to_root_user(); lp_load(get_dyn_CONFIGFILE(), true, false, false, true); lsasd_reopen_logs(lsasd_child_id); if (lsasd_child_id == 0) { pfh_daemon_config(DAEMON_NAME, &pf_lsasd_cfg, &default_pf_lsasd_cfg); pfh_manage_pool(ev_ctx, msg, &pf_lsasd_cfg, lsasd_pool); } }
/**************************************************************************** ** reload the services file **************************************************************************** */ BOOL reload_services_nmbd(BOOL test) { BOOL ret; extern fstring remote_machine; fstrcpy( remote_machine, "nmb" ); if ( lp_loaded() ) { pstring fname; pstrcpy( fname,lp_configfile()); if (file_exist(fname,NULL) && !strcsequal(fname,servicesf_nmbd)) { pstrcpy(servicesf_nmbd,fname); test = False; } } if ( test && !lp_file_list_changed() ) return(True); ret = lp_load( servicesf_nmbd, True , False, False); /* perhaps the config filename is now set */ if ( !test ) { DEBUG( 3, ( "services not loaded\n" ) ); reload_services_nmbd( True ); } /* Do a sanity check for a misconfigured nmbd */ if( lp_wins_support() && *lp_wins_server() ) { DEBUG(0,("ERROR: both 'wins support = true' and 'wins server = <server>' \ cannot be set in the smb.conf file. nmbd aborting.\n")); exit(10); }
int main(int argc, char *argv[]) { int i, ret; int iters = 1; /* Needed to initialize character set */ lp_load("/dev/null", True, False, False); if (argc < 3) { fprintf(stderr, "usage: %s STRING1 STRING2 [ITERS]\n" "Compares two strings, prints the results of StrCaseCmp\n", argv[0]); return 2; } if (argc >= 4) iters = atoi(argv[3]); for (i = 0; i < iters; i++) ret = StrCaseCmp(argv[1], argv[2]); printf("%d\n", ret); return 0; }
int main(int argc, char **argv, char **envp) { int opt; TALLOC_CTX *frame = talloc_stackframe(); poptContext pc; static char *string_arg; static char *opt_domain_name; static int int_arg; int result = 1; bool verbose = false; struct poptOption long_options[] = { POPT_AUTOHELP /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ { "domain-users", 'u', POPT_ARG_NONE, 0, 'u', "Lists all domain users", "domain"}, { "domain-groups", 'g', POPT_ARG_NONE, 0, 'g', "Lists all domain groups", "domain" }, { "WINS-by-name", 'N', POPT_ARG_STRING, &string_arg, 'N', "Converts NetBIOS name to IP", "NETBIOS-NAME" }, { "WINS-by-ip", 'I', POPT_ARG_STRING, &string_arg, 'I', "Converts IP address to NetBIOS name", "IP" }, { "name-to-sid", 'n', POPT_ARG_STRING, &string_arg, 'n', "Converts name to sid", "NAME" }, { "sid-to-name", 's', POPT_ARG_STRING, &string_arg, 's', "Converts sid to name", "SID" }, { "lookup-rids", 'R', POPT_ARG_STRING, &string_arg, 'R', "Converts RIDs to names", "RIDs" }, { "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U', "Converts uid to sid" , "UID" }, { "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G', "Converts gid to sid", "GID" }, { "sid-to-uid", 'S', POPT_ARG_STRING, &string_arg, 'S', "Converts sid to uid", "SID" }, { "sid-to-gid", 'Y', POPT_ARG_STRING, &string_arg, 'Y', "Converts sid to gid", "SID" }, { "allocate-uid", 0, POPT_ARG_NONE, 0, OPT_ALLOCATE_UID, "Get a new UID out of idmap" }, { "allocate-gid", 0, POPT_ARG_NONE, 0, OPT_ALLOCATE_GID, "Get a new GID out of idmap" }, { "check-secret", 't', POPT_ARG_NONE, 0, 't', "Check shared secret" }, { "trusted-domains", 'm', POPT_ARG_NONE, 0, 'm', "List trusted domains" }, { "all-domains", 0, POPT_ARG_NONE, 0, OPT_LIST_ALL_DOMAINS, "List all domains (trusted and own domain)" }, { "own-domain", 0, POPT_ARG_NONE, 0, OPT_LIST_OWN_DOMAIN, "List own domain" }, { "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE, "Show sequence numbers of all domains" }, { "online-status", 0, POPT_ARG_NONE, 0, OPT_ONLINESTATUS, "Show whether domains are marked as online or offline"}, { "domain-info", 'D', POPT_ARG_STRING, &string_arg, 'D', "Show most of the info we have about the domain" }, { "user-info", 'i', POPT_ARG_STRING, &string_arg, 'i', "Get user info", "USER" }, { "uid-info", 0, POPT_ARG_INT, &int_arg, OPT_UID_INFO, "Get user info from uid", "UID" }, { "group-info", 0, POPT_ARG_STRING, &string_arg, OPT_GROUP_INFO, "Get group info", "GROUP" }, { "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r', "Get user groups", "USER" }, { "user-domgroups", 0, POPT_ARG_STRING, &string_arg, OPT_USERDOMGROUPS, "Get user domain groups", "SID" }, { "user-sids", 0, POPT_ARG_STRING, &string_arg, OPT_USERSIDS, "Get user group sids for user SID", "SID" }, { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a', "authenticate user", "user%password" }, { "set-auth-user", 0, POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER, "Store user and password used by winbindd (root only)", "user%password" }, { "getdcname", 0, POPT_ARG_STRING, &string_arg, OPT_GETDCNAME, "Get a DC name for a foreign domain", "domainname" }, { "dsgetdcname", 0, POPT_ARG_STRING, &string_arg, OPT_DSGETDCNAME, "Find a DC for a domain", "domainname" }, { "get-auth-user", 0, POPT_ARG_NONE, NULL, OPT_GET_AUTH_USER, "Retrieve user and password used by winbindd (root only)", NULL }, { "ping", 'p', POPT_ARG_NONE, 0, 'p', "Ping winbindd to see if it is alive" }, { "domain", 0, POPT_ARG_STRING, &opt_domain_name, OPT_DOMAIN_NAME, "Define to the domain to restrict operation", "domain" }, #ifdef WITH_FAKE_KASERVER { "klog", 'k', POPT_ARG_STRING, &string_arg, 'k', "set an AFS token from winbind", "user%password" }, #endif #ifdef HAVE_KRB5 { "krb5auth", 'K', POPT_ARG_STRING, &string_arg, 'K', "authenticate user using Kerberos", "user%password" }, /* destroys wbinfo --help output */ /* "user%password,DOM\\user%password,[email protected],EXAMPLE.COM\\user%password" }, */ #endif { "separator", 0, POPT_ARG_NONE, 0, OPT_SEPARATOR, "Get the active winbind separator", NULL }, { "verbose", 0, POPT_ARG_NONE, 0, OPT_VERBOSE, "Print additional information per command", NULL }, POPT_COMMON_CONFIGFILE POPT_COMMON_VERSION POPT_TABLEEND }; /* Samba client initialisation */ load_case_tables(); /* Parse options */ pc = poptGetContext("wbinfo", argc, (const char **)argv, long_options, 0); /* Parse command line options */ if (argc == 1) { poptPrintHelp(pc, stderr, 0); return 1; } while((opt = poptGetNextOpt(pc)) != -1) { /* get the generic configuration parameters like --domain */ switch (opt) { case OPT_VERBOSE: verbose = True; break; } } poptFreeContext(pc); if (!lp_load(get_dyn_CONFIGFILE(), true, false, false, true)) { d_fprintf(stderr, "wbinfo: error opening config file %s. Error was %s\n", get_dyn_CONFIGFILE(), strerror(errno)); exit(1); } if (!init_names()) return 1; load_interfaces(); pc = poptGetContext(NULL, argc, (const char **)argv, long_options, POPT_CONTEXT_KEEP_FIRST); while((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { case 'u': if (!print_domain_users(opt_domain_name)) { d_fprintf(stderr, "Error looking up domain users\n"); goto done; } break; case 'g': if (!print_domain_groups(opt_domain_name)) { d_fprintf(stderr, "Error looking up domain groups\n"); goto done; } break; case 's': if (!wbinfo_lookupsid(string_arg)) { d_fprintf(stderr, "Could not lookup sid %s\n", string_arg); goto done; } break; case 'R': if (!wbinfo_lookuprids(opt_domain_name, string_arg)) { d_fprintf(stderr, "Could not lookup RIDs %s\n", string_arg); goto done; } break; case 'n': if (!wbinfo_lookupname(string_arg)) { d_fprintf(stderr, "Could not lookup name %s\n", string_arg); goto done; } break; case 'N': if (!wbinfo_wins_byname(string_arg)) { d_fprintf(stderr, "Could not lookup WINS by name %s\n", string_arg); goto done; } break; case 'I': if (!wbinfo_wins_byip(string_arg)) { d_fprintf(stderr, "Could not lookup WINS by IP %s\n", string_arg); goto done; } break; case 'U': if (!wbinfo_uid_to_sid(int_arg)) { d_fprintf(stderr, "Could not convert uid %d to sid\n", int_arg); goto done; } break; case 'G': if (!wbinfo_gid_to_sid(int_arg)) { d_fprintf(stderr, "Could not convert gid %d to sid\n", int_arg); goto done; } break; case 'S': if (!wbinfo_sid_to_uid(string_arg)) { d_fprintf(stderr, "Could not convert sid %s to uid\n", string_arg); goto done; } break; case 'Y': if (!wbinfo_sid_to_gid(string_arg)) { d_fprintf(stderr, "Could not convert sid %s to gid\n", string_arg); goto done; } break; case OPT_ALLOCATE_UID: if (!wbinfo_allocate_uid()) { d_fprintf(stderr, "Could not allocate a uid\n"); goto done; } break; case OPT_ALLOCATE_GID: if (!wbinfo_allocate_gid()) { d_fprintf(stderr, "Could not allocate a gid\n"); goto done; } break; case 't': if (!wbinfo_check_secret()) { d_fprintf(stderr, "Could not check secret\n"); goto done; } break; case 'm': if (!wbinfo_list_domains(false, verbose)) { d_fprintf(stderr, "Could not list trusted domains\n"); goto done; } break; case OPT_SEQUENCE: if (!wbinfo_show_sequence(opt_domain_name)) { d_fprintf(stderr, "Could not show sequence numbers\n"); goto done; } break; case OPT_ONLINESTATUS: if (!wbinfo_show_onlinestatus(opt_domain_name)) { d_fprintf(stderr, "Could not show online-status\n"); goto done; } break; case 'D': if (!wbinfo_domain_info(string_arg)) { d_fprintf(stderr, "Could not get domain info\n"); goto done; } break; case 'i': if (!wbinfo_get_userinfo(string_arg)) { d_fprintf(stderr, "Could not get info for user %s\n", string_arg); goto done; } break; case OPT_UID_INFO: if ( !wbinfo_get_uidinfo(int_arg)) { d_fprintf(stderr, "Could not get info for uid " "%d\n", int_arg); goto done; } break; case OPT_GROUP_INFO: if ( !wbinfo_get_groupinfo(string_arg)) { d_fprintf(stderr, "Could not get info for " "group %s\n", string_arg); goto done; } break; case 'r': if (!wbinfo_get_usergroups(string_arg)) { d_fprintf(stderr, "Could not get groups for user %s\n", string_arg); goto done; } break; case OPT_USERSIDS: if (!wbinfo_get_usersids(string_arg)) { d_fprintf(stderr, "Could not get group SIDs for user SID %s\n", string_arg); goto done; } break; case OPT_USERDOMGROUPS: if (!wbinfo_get_userdomgroups(string_arg)) { d_fprintf(stderr, "Could not get user's domain groups " "for user SID %s\n", string_arg); goto done; } break; case 'a': { bool got_error = false; char *pass; if ((pass = strchr(string_arg, '%')) != NULL) { *pass = 0; pass++; } else { pass = (char *)""; } if (!wbinfo_auth(string_arg, pass)) { d_fprintf(stderr, "Could not authenticate user %s with " "plaintext password\n", string_arg); got_error = true; } if (!wbinfo_auth_crap(string_arg, pass)) { d_fprintf(stderr, "Could not authenticate user %s with " "challenge/response\n", string_arg); got_error = true; } if (got_error) goto done; break; } case 'K': { uint32 flags = WBFLAG_PAM_KRB5 | WBFLAG_PAM_CACHED_LOGIN | WBFLAG_PAM_FALLBACK_AFTER_KRB5 | WBFLAG_PAM_INFO3_TEXT; char *pass; if ((pass = strchr(string_arg, '%')) != NULL) { *pass = 0; pass++; } else { pass = (char *)""; } if (!wbinfo_auth_krb5(string_arg, pass, "FILE", flags)) { d_fprintf(stderr, "Could not authenticate user [%s] with " "Kerberos (ccache: %s)\n", string_arg, "FILE"); goto done; } break; } case 'k': if (!wbinfo_klog(string_arg)) { d_fprintf(stderr, "Could not klog user\n"); goto done; } break; case 'p': if (!wbinfo_ping()) { d_fprintf(stderr, "could not ping winbindd!\n"); goto done; } break; case OPT_SET_AUTH_USER: if (!wbinfo_set_auth_user(string_arg)) { goto done; } break; case OPT_GET_AUTH_USER: wbinfo_get_auth_user(); break; case OPT_GETDCNAME: if (!wbinfo_getdcname(string_arg)) { goto done; } break; case OPT_DSGETDCNAME: if (!wbinfo_dsgetdcname(string_arg, 0)) { goto done; } break; case OPT_SEPARATOR: { const char sep = winbind_separator_int(true); if ( !sep ) { goto done; } d_printf("%c\n", sep); break; } case OPT_LIST_ALL_DOMAINS: if (!wbinfo_list_domains(true, verbose)) { goto done; } break; case OPT_LIST_OWN_DOMAIN: if (!wbinfo_list_own_domain()) { goto done; } break; /* generic configuration options */ case OPT_DOMAIN_NAME: break; case OPT_VERBOSE: break; default: d_fprintf(stderr, "Invalid option\n"); poptPrintHelp(pc, stderr, 0); goto done; } } result = 0; /* Exit code */ done: talloc_destroy(frame); poptFreeContext(pc); return result; }
int main(int argc, const char **argv) { poptContext pc; int opt; static struct poptOption wbinfo_options[] = { { "timeout", 't', POPT_ARG_INT, &timeout, 't', "Set timeout value in seconds", "TIMEOUT" }, { "configfile", 's', POPT_ARG_STRING, NULL, 's', "Use alternative configuration file", "CONFIGFILE" }, POPT_TABLEEND }; struct poptOption options[] = { { NULL, 0, POPT_ARG_INCLUDE_TABLE, wbinfo_options, 0, "Options" }, POPT_AUTOHELP POPT_COMMON_VERSION POPT_TABLEEND }; setup_logging(argv[0],True); /* Parse command line arguments using popt */ pc = poptGetContext( "smbcontrol", argc, (const char **)argv, options, 0); poptSetOtherOptionHelp(pc, "[OPTION...] <destination> <message-type> " "<parameters>"); if (argc == 1) usage(&pc); while ((opt = poptGetNextOpt(pc)) != -1) { switch(opt) { case 't': /* --timeout */ argc -= 2; break; case 's': /* --configfile */ pstrcpy(dyn_CONFIGFILE, poptGetOptArg(pc)); argc -= 2; break; default: fprintf(stderr, "Invalid option\n"); poptPrintHelp(pc, stderr, 0); break; } } /* We should now have the remaining command line arguments in argv. The argc parameter should have been decremented to the correct value in the above switch statement. */ argv = (const char **)poptGetArgs(pc); argc--; /* Don't forget about argv[0] */ if (argc == 1) usage(&pc); lp_load(dyn_CONFIGFILE,False,False,False); /* Need to invert sense of return code -- samba * routines mostly return True==1 for success, but * shell needs 0. */ return !do_command(argc, argv); }
int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ int copies; /* Number of copies */ int port; /* Port number */ char uri[1024], /* URI */ *sep, /* Pointer to separator */ *password; /* Password */ const char *username, /* Username */ *server, /* Server name */ *printer; /* Printer name */ const char *workgroup; /* Workgroup */ FILE *fp; /* File to print */ int status=0; /* Status of LPD job */ struct cli_state *cli; /* SMB interface */ char null_str[1]; int tries = 0; const char *dev_uri; null_str[0] = '\0'; /* we expect the URI in argv[0]. Detect the case where it is in argv[1] and cope */ if (argc > 2 && strncmp(argv[0],"smb://", 6) && !strncmp(argv[1],"smb://", 6)) { argv++; argc--; } if (argc == 1) { /* * NEW! In CUPS 1.1 the backends are run with no arguments to list the * available devices. These can be devices served by this backend * or any other backends (i.e. you can have an SNMP backend that * is only used to enumerate the available network printers... :) */ list_devices(); return (0); } if (argc < 6 || argc > 7) { fprintf(stderr, "Usage: %s [DEVICE_URI] job-id user title copies options [file]\n", argv[0]); fputs(" The DEVICE_URI environment variable can also contain the\n", stderr); fputs(" destination printer:\n", stderr); fputs("\n", stderr); fputs(" smb://[username:password@][workgroup/]server[:port]/printer\n", stderr); return (1); } /* * If we have 7 arguments, print the file named on the command-line. * Otherwise, print data from stdin... */ if (argc == 6) { /* * Print from Copy stdin to a temporary file... */ fp = stdin; copies = 1; } else if ((fp = fopen(argv[6], "rb")) == NULL) { perror("ERROR: Unable to open print file"); return (1); } else copies = atoi(argv[4]); /* * Find the URI... */ dev_uri = getenv("DEVICE_URI"); if (dev_uri) strncpy(uri, dev_uri, sizeof(uri) - 1); else if (strncmp(argv[0], "smb://", 6) == 0) strncpy(uri, argv[0], sizeof(uri) - 1); else { fputs("ERROR: No device URI found in DEVICE_URI environment variable or argv[0] !\n", stderr); return (1); } uri[sizeof(uri) - 1] = '\0'; /* * Extract the destination from the URI... */ if ((sep = strrchr_m(uri, '@')) != NULL) { username = uri + 6; *sep++ = '\0'; server = sep; /* * Extract password as needed... */ if ((password = strchr_m(username, ':')) != NULL) *password++ = '\0'; else password = null_str; } else { username = null_str; password = null_str; server = uri + 6; } if ((sep = strchr_m(server, '/')) == NULL) { fputs("ERROR: Bad URI - need printer name!\n", stderr); return (1); } *sep++ = '\0'; printer = sep; if ((sep = strchr_m(printer, '/')) != NULL) { /* * Convert to smb://[username:password@]workgroup/server/printer... */ *sep++ = '\0'; workgroup = server; server = printer; printer = sep; } else workgroup = NULL; if ((sep = strrchr_m(server, ':')) != NULL) { *sep++ = '\0'; port=atoi(sep); } else port=0; /* * Setup the SAMBA server state... */ setup_logging("smbspool", True); in_client = True; /* Make sure that we tell lp_load we are */ load_case_tables(); if (!lp_load(dyn_CONFIGFILE, True, False, False, True)) { fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE); return (1); } if (workgroup == NULL) workgroup = lp_workgroup(); load_interfaces(); do { if ((cli = smb_connect(workgroup, server, port, printer, username, password, argv[2])) == NULL) { if (getenv("CLASS") == NULL) { fprintf(stderr, "ERROR: Unable to connect to CIFS host, will retry in 60 seconds...\n"); sleep (60); /* should just waiting and retrying fix authentication ??? */ tries++; } else { fprintf(stderr, "ERROR: Unable to connect to CIFS host, trying next printer...\n"); return (1); } } } while ((cli == NULL) && (tries < MAX_RETRY_CONNECT)); if (cli == NULL) { fprintf(stderr, "ERROR: Unable to connect to CIFS host after (tried %d times)\n", tries); return (1); } /* * Now that we are connected to the server, ignore SIGTERM so that we * can finish out any page data the driver sends (e.g. to eject the * current page... Only ignore SIGTERM if we are printing data from * stdin (otherwise you can't cancel raw jobs...) */ if (argc < 7) CatchSignal(SIGTERM, SIG_IGN); /* * Queue the job... */ for (i = 0; i < copies; i ++) if ((status = smb_print(cli, argv[3] /* title */, fp)) != 0) break; cli_shutdown(cli); /* * Return the queue status... */ return (status); }