1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

s4-dns: use a loadparm list for samba_runcmd() commands

This allows commands with multiple arguments and quoting to be used,
while still avoiding running a shell (and this having shell expansion
problems)
This commit is contained in:
Andrew Tridgell 2010-02-26 17:09:35 +11:00
parent 336ebeabad
commit b0b857d6ca
5 changed files with 18 additions and 18 deletions

View File

@ -890,7 +890,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
struct timeval timeout,
int stdout_log_level,
int stderr_log_level,
const char *arg0, ...);
const char **argv0, ...);
#endif /* _SAMBA_UTIL_H_ */

View File

@ -154,7 +154,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
struct timeval timeout,
int stdout_log_level,
int stderr_log_level,
const char *arg0, ...)
const char **argv0, ...)
{
struct samba_runcmd *r;
int p1[2], p2[2];
@ -174,7 +174,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
r->stdout_log_level = stdout_log_level;
r->stderr_log_level = stderr_log_level;
r->arg0 = talloc_strdup(r, arg0);
r->arg0 = talloc_strdup(r, argv0[0]);
if (composite_nomem(r->arg0, c)) return c;
if (pipe(p1) != 0) {
@ -228,13 +228,13 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
dup2(p1[1], 1);
dup2(p2[1], 2);
argv = str_list_make_single(r, r->arg0);
argv = str_list_copy(r, argv0);
if (!argv) {
fprintf(stderr, "Out of memory in child\n");
_exit(255);
}
va_start(ap, arg0);
va_start(ap, argv0);
while (1) {
char *arg = va_arg(ap, char *);
if (arg == NULL) break;
@ -246,7 +246,7 @@ struct composite_context *samba_runcmd(struct tevent_context *ev,
}
va_end(ap);
ret = execv(arg0, argv);
ret = execv(r->arg0, argv);
fprintf(stderr, "Failed to exec child - %s\n", strerror(errno));
_exit(255);
return NULL;

View File

@ -157,10 +157,10 @@ static void dnsupdate_rebuild(struct dnsupdate_service *service)
DEBUG(2,("Loading new DNS update grant rules\n"));
service->confupdate.c = samba_runcmd(service->task->event_ctx, service,
timeval_current_ofs(10, 0),
2, 0,
lp_rndc_command(service->task->lp_ctx),
"reload", NULL);
timeval_current_ofs(10, 0),
2, 0,
lp_rndc_command(service->task->lp_ctx),
"reload", NULL);
service->confupdate.c->async.fn = dnsupdate_rndc_done;
service->confupdate.c->async.private_data = service;

View File

@ -186,8 +186,8 @@ struct loadparm_global
int bDisableNetbios;
int bRpcBigEndian;
char *szNTPSignDSocketDirectory;
char *szRNDCCommand;
char *szDNSUpdateCommand;
const char **szRNDCCommand;
const char **szDNSUpdateCommand;
char *szNSUpdateCommand;
struct parmlist_entry *param_opt;
};
@ -506,8 +506,8 @@ static struct parm_struct parm_table[] = {
{"idmap trusted only", P_BOOL, P_GLOBAL, GLOBAL_VAR(bIdmapTrustedOnly), NULL, NULL},
{"ntp signd socket directory", P_STRING, P_GLOBAL, GLOBAL_VAR(szNTPSignDSocketDirectory), NULL, NULL },
{"rndc command", P_STRING, P_GLOBAL, GLOBAL_VAR(szRNDCCommand), NULL, NULL },
{"dns update command", P_STRING, P_GLOBAL, GLOBAL_VAR(szDNSUpdateCommand), NULL, NULL },
{"rndc command", P_LIST, P_GLOBAL, GLOBAL_VAR(szRNDCCommand), NULL, NULL },
{"dns update command", P_LIST, P_GLOBAL, GLOBAL_VAR(szDNSUpdateCommand), NULL, NULL },
{"nsupdate command", P_STRING, P_GLOBAL, GLOBAL_VAR(szNSUpdateCommand), NULL, NULL },
{NULL, P_BOOL, P_NONE, 0, NULL, NULL}
@ -660,8 +660,8 @@ _PUBLIC_ FN_GLOBAL_STRING(lp_dos_charset, dos_charset)
_PUBLIC_ FN_GLOBAL_STRING(lp_unix_charset, unix_charset)
_PUBLIC_ FN_GLOBAL_STRING(lp_display_charset, display_charset)
_PUBLIC_ FN_GLOBAL_STRING(lp_piddir, szPidDir)
_PUBLIC_ FN_GLOBAL_STRING(lp_rndc_command, szRNDCCommand)
_PUBLIC_ FN_GLOBAL_STRING(lp_dns_update_command, szDNSUpdateCommand)
_PUBLIC_ FN_GLOBAL_LIST(lp_rndc_command, szRNDCCommand)
_PUBLIC_ FN_GLOBAL_LIST(lp_dns_update_command, szDNSUpdateCommand)
_PUBLIC_ FN_GLOBAL_STRING(lp_nsupdate_command, szNSUpdateCommand)
_PUBLIC_ FN_GLOBAL_LIST(lp_dcerpc_endpoint_servers, dcerpc_ep_servers)
_PUBLIC_ FN_GLOBAL_LIST(lp_server_services, server_services)

View File

@ -130,8 +130,8 @@ const char **lp_wins_server_list(struct loadparm_context *);
const char **lp_interfaces(struct loadparm_context *);
const char *lp_socket_address(struct loadparm_context *);
const char **lp_netbios_aliases(struct loadparm_context *);
const char *lp_rndc_command(struct loadparm_context *);
const char *lp_dns_update_command(struct loadparm_context *);
const char **lp_rndc_command(struct loadparm_context *);
const char **lp_dns_update_command(struct loadparm_context *);
bool lp_disable_netbios(struct loadparm_context *);
bool lp_wins_support(struct loadparm_context *);
bool lp_wins_dns_proxy(struct loadparm_context *);