?? net_ads.c
字號:
return -1; } srv_dn = ldap_get_dn(ads->ld, res); srv_cn = ldap_explode_dn(srv_dn, 1); asprintf(&prt_dn, "cn=%s-%s,%s", srv_cn[0], printername, srv_dn); pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SPOOLSS, &nt_status); get_remote_printer_publishing_data(pipe_hnd, mem_ctx, &mods, printername); rc = ads_add_printer_entry(ads, prt_dn, mem_ctx, &mods); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "ads_publish_printer: %s\n", ads_errstr(rc)); ads_destroy(&ads); return -1; } d_printf("published printer\n"); ads_destroy(&ads); return 0;}static int net_ads_printer_remove(int argc, const char **argv){ ADS_STRUCT *ads; ADS_STATUS rc; const char *servername; char *prt_dn; void *res = NULL; if (!(ads = ads_startup())) { return -1; } if (argc < 1) { return net_ads_printer_usage(argc, argv); } if (argc > 1) { servername = argv[1]; } else { servername = global_myname(); } rc = ads_find_printer_on_server(ads, &res, argv[0], servername); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "ads_find_printer_on_server: %s\n", ads_errstr(rc)); ads_msgfree(ads, res); ads_destroy(&ads); return -1; } if (ads_count_replies(ads, res) == 0) { d_fprintf(stderr, "Printer '%s' not found\n", argv[1]); ads_msgfree(ads, res); ads_destroy(&ads); return -1; } prt_dn = ads_get_dn(ads, res); ads_msgfree(ads, res); rc = ads_del_dn(ads, prt_dn); ads_memfree(ads, prt_dn); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "ads_del_dn: %s\n", ads_errstr(rc)); ads_destroy(&ads); return -1; } ads_destroy(&ads); return 0;}static int net_ads_printer(int argc, const char **argv){ struct functable func[] = { {"SEARCH", net_ads_printer_search}, {"INFO", net_ads_printer_info}, {"PUBLISH", net_ads_printer_publish}, {"REMOVE", net_ads_printer_remove}, {NULL, NULL} }; return net_run_function(argc, argv, func, net_ads_printer_usage);}static int net_ads_password(int argc, const char **argv){ ADS_STRUCT *ads; const char *auth_principal = opt_user_name; const char *auth_password = opt_password; char *realm = NULL; char *new_password = NULL; char *c, *prompt; const char *user; ADS_STATUS ret; if (opt_user_name == NULL || opt_password == NULL) { d_fprintf(stderr, "You must supply an administrator username/password\n"); return -1; } if (argc < 1) { d_fprintf(stderr, "ERROR: You must say which username to change password for\n"); return -1; } user = argv[0]; if (!strchr_m(user, '@')) { asprintf(&c, "%s@%s", argv[0], lp_realm()); user = c; } use_in_memory_ccache(); c = strchr_m(auth_principal, '@'); if (c) { realm = ++c; } else { realm = lp_realm(); } /* use the realm so we can eventually change passwords for users in realms other than default */ if (!(ads = ads_init(realm, NULL, NULL))) { return -1; } /* we don't actually need a full connect, but it's the easy way to fill in the KDC's addresss */ ads_connect(ads); if (!ads || !ads->config.realm) { d_fprintf(stderr, "Didn't find the kerberos server!\n"); return -1; } if (argv[1]) { new_password = (char *)argv[1]; } else { asprintf(&prompt, "Enter new password for %s:", user); new_password = getpass(prompt); free(prompt); } ret = kerberos_set_password(ads->auth.kdc_server, auth_principal, auth_password, user, new_password, ads->auth.time_offset); if (!ADS_ERR_OK(ret)) { d_fprintf(stderr, "Password change failed :-( ...\n"); ads_destroy(&ads); return -1; } d_printf("Password change for %s completed.\n", user); ads_destroy(&ads); return 0;}int net_ads_changetrustpw(int argc, const char **argv){ ADS_STRUCT *ads; char *host_principal; fstring my_name; ADS_STATUS ret; if (!secrets_init()) { DEBUG(1,("Failed to initialise secrets database\n")); return -1; } net_use_machine_password(); use_in_memory_ccache(); if (!(ads = ads_startup())) { return -1; } fstrcpy(my_name, global_myname()); strlower_m(my_name); asprintf(&host_principal, "%s@%s", my_name, ads->config.realm); d_printf("Changing password for principal: HOST/%s\n", host_principal); ret = ads_change_trust_account_password(ads, host_principal); if (!ADS_ERR_OK(ret)) { d_fprintf(stderr, "Password change failed :-( ...\n"); ads_destroy(&ads); SAFE_FREE(host_principal); return -1; } d_printf("Password change for principal HOST/%s succeeded.\n", host_principal); if (lp_use_kerberos_keytab()) { d_printf("Attempting to update system keytab with new password.\n"); if (ads_keytab_create_default(ads)) { d_printf("Failed to update system keytab.\n"); } } ads_destroy(&ads); SAFE_FREE(host_principal); return 0;}/* help for net ads search*/static int net_ads_search_usage(int argc, const char **argv){ d_printf( "\nnet ads search <expression> <attributes...>\n"\ "\nperform a raw LDAP search on a ADS server and dump the results\n"\ "The expression is a standard LDAP search expression, and the\n"\ "attributes are a list of LDAP fields to show in the results\n\n"\ "Example: net ads search '(objectCategory=group)' sAMAccountName\n\n" ); net_common_flags_usage(argc, argv); return -1;}/* general ADS search function. Useful in diagnosing problems in ADS*/static int net_ads_search(int argc, const char **argv){ ADS_STRUCT *ads; ADS_STATUS rc; const char *ldap_exp; const char **attrs; void *res = NULL; if (argc < 1) { return net_ads_search_usage(argc, argv); } if (!(ads = ads_startup())) { return -1; } ldap_exp = argv[0]; attrs = (argv + 1); rc = ads_do_search_all(ads, ads->config.bind_path, LDAP_SCOPE_SUBTREE, ldap_exp, attrs, &res); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "search failed: %s\n", ads_errstr(rc)); ads_destroy(&ads); return -1; } d_printf("Got %d replies\n\n", ads_count_replies(ads, res)); /* dump the results */ ads_dump(ads, res); ads_msgfree(ads, res); ads_destroy(&ads); return 0;}/* help for net ads search*/static int net_ads_dn_usage(int argc, const char **argv){ d_printf( "\nnet ads dn <dn> <attributes...>\n"\ "\nperform a raw LDAP search on a ADS server and dump the results\n"\ "The DN standard LDAP DN, and the attributes are a list of LDAP fields \n"\ "to show in the results\n\n"\ "Example: net ads dn 'CN=administrator,CN=Users,DC=my,DC=domain' sAMAccountName\n\n" ); net_common_flags_usage(argc, argv); return -1;}/* general ADS search function. Useful in diagnosing problems in ADS*/static int net_ads_dn(int argc, const char **argv){ ADS_STRUCT *ads; ADS_STATUS rc; const char *dn; const char **attrs; void *res = NULL; if (argc < 1) { return net_ads_dn_usage(argc, argv); } if (!(ads = ads_startup())) { return -1; } dn = argv[0]; attrs = (argv + 1); rc = ads_do_search_all(ads, dn, LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res); if (!ADS_ERR_OK(rc)) { d_fprintf(stderr, "search failed: %s\n", ads_errstr(rc)); ads_destroy(&ads); return -1; } d_printf("Got %d replies\n\n", ads_count_replies(ads, res)); /* dump the results */ ads_dump(ads, res); ads_msgfree(ads, res); ads_destroy(&ads); return 0;}static int net_ads_keytab_usage(int argc, const char **argv){ d_printf( "net ads keytab <COMMAND>\n"\"<COMMAND> can be either:\n"\" CREATE Creates a fresh keytab\n"\" ADD Adds new service principal\n"\" FLUSH Flushes out all keytab entries\n"\" HELP Prints this help message\n"\"The ADD command will take arguments, the other commands\n"\"will not take any arguments. The arguments given to ADD\n"\"should be a list of principals to add. For example, \n"\" net ads keytab add srv1 srv2\n"\"will add principals for the services srv1 and srv2 to the\n"\"system's keytab.\n"\"\n" ); return -1;}static int net_ads_keytab_flush(int argc, const char **argv){ int ret; ADS_STRUCT *ads; if (!(ads = ads_startup())) { return -1; } ret = ads_keytab_flush(ads); ads_destroy(&ads); return ret;}static int net_ads_keytab_add(int argc, const char **argv){ int i; int ret = 0; ADS_STRUCT *ads; d_printf("Processing principals to add...\n"); if (!(ads = ads_startup())) { return -1; } for (i = 0; i < argc; i++) { ret |= ads_keytab_add_entry(ads, argv[i]); } ads_destroy(&ads); return ret;}static int net_ads_keytab_create(int argc, const char **argv){ ADS_STRUCT *ads; int ret; if (!(ads = ads_startup())) { return -1; } ret = ads_keytab_create_default(ads); ads_destroy(&ads); return ret;}int net_ads_keytab(int argc, const char **argv){ struct functable func[] = { {"CREATE", net_ads_keytab_create}, {"ADD", net_ads_keytab_add}, {"FLUSH", net_ads_keytab_flush}, {"HELP", net_ads_keytab_usage}, {NULL, NULL} }; if (!lp_use_kerberos_keytab()) { d_printf("\nWarning: \"use kerberos keytab\" must be set to \"true\" in order to \use keytab functions.\n"); } return net_run_function(argc, argv, func, net_ads_keytab_usage);}int net_ads_help(int argc, const char **argv){ struct functable func[] = { {"USER", net_ads_user_usage}, {"GROUP", net_ads_group_usage}, {"PRINTER", net_ads_printer_usage}, {"SEARCH", net_ads_search_usage},#if 0 {"INFO", net_ads_info}, {"JOIN", net_ads_join}, {"LEAVE", net_ads_leave}, {"PASSWORD", net_ads_password}, {"CHANGETRUSTPW", net_ads_changetrustpw},#endif {NULL, NULL} }; return net_run_function(argc, argv, func, net_ads_usage);}int net_ads(int argc, const char **argv){ struct functable func[] = { {"INFO", net_ads_info}, {"JOIN", net_ads_join}, {"TESTJOIN", net_ads_testjoin}, {"LEAVE", net_ads_leave}, {"STATUS", net_ads_status}, {"USER", net_ads_user}, {"GROUP", net_ads_group}, {"PASSWORD", net_ads_password}, {"CHANGETRUSTPW", net_ads_changetrustpw}, {"PRINTER", net_ads_printer}, {"SEARCH", net_ads_search}, {"DN", net_ads_dn}, {"WORKGROUP", net_ads_workgroup}, {"LOOKUP", net_ads_lookup}, {"KEYTAB", net_ads_keytab}, {"HELP", net_ads_help}, {NULL, NULL} }; return net_run_function(argc, argv, func, net_ads_usage);}#elsestatic int net_ads_noads(void){ d_fprintf(stderr, "ADS support not compiled in\n"); return -1;}int net_ads_keytab(int argc, const char **argv){ return net_ads_noads();}int net_ads_usage(int argc, const char **argv){ return net_ads_noads();}int net_ads_help(int argc, const char **argv){ return net_ads_noads();}int net_ads_changetrustpw(int argc, const char **argv){ return net_ads_noads();}int net_ads_join(int argc, const char **argv){ return net_ads_noads();}int net_ads_user(int argc, const char **argv){ return net_ads_noads();}int net_ads_group(int argc, const char **argv){ return net_ads_noads();}/* this one shouldn't display a message */int net_ads_check(void){ return -1;}int net_ads(int argc, const char **argv){ return net_ads_usage(argc, argv);}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -