diff options
author | Günther Deschner <gd@samba.org> | 2007-12-21 16:08:13 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2007-12-21 16:08:13 +0100 |
commit | f3607f85b673ade41773fcfd2cb6935b512fbf60 (patch) | |
tree | b3114f35d1ad4381d5dc0b6286dbab63efbe34db /source3 | |
parent | be57bc8568fc48597695327473f1e06354574236 (diff) | |
download | samba-f3607f85b673ade41773fcfd2cb6935b512fbf60.tar.gz samba-f3607f85b673ade41773fcfd2cb6935b512fbf60.tar.bz2 samba-f3607f85b673ade41773fcfd2cb6935b512fbf60.zip |
Add netdomjoin cmd line tool (another libnetapi example).
Guenther
(This used to be commit c502686f09713a7cf3786c254be6515a7aa23555)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/netapi/examples/Makefile.in | 7 | ||||
-rw-r--r-- | source3/lib/netapi/examples/netdomjoin.c | 107 |
2 files changed, 113 insertions, 1 deletions
diff --git a/source3/lib/netapi/examples/Makefile.in b/source3/lib/netapi/examples/Makefile.in index 79f9187d84..d618599433 100644 --- a/source3/lib/netapi/examples/Makefile.in +++ b/source3/lib/netapi/examples/Makefile.in @@ -21,8 +21,9 @@ COMPILE = $(COMPILE_CC) $(COMPILE_CC) >/dev/null 2>&1 GETDC_OBJ = getdc.o +NETDOMJOIN_OBJ = netdomjoin.o -PROGS = getdc +PROGS = getdc netdomjoin all: $(PROGS) @@ -30,5 +31,9 @@ getdc: $(GETDC_OBJ) @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(GETDC_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS) +netdomjoin: $(NETDOMJOIN_OBJ) + @echo Linking $@ + @$(CC) $(FLAGS) -o $@ $(NETDOMJOIN_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS) + clean: @rm -f $(PROGS) diff --git a/source3/lib/netapi/examples/netdomjoin.c b/source3/lib/netapi/examples/netdomjoin.c new file mode 100644 index 0000000000..a2bb700250 --- /dev/null +++ b/source3/lib/netapi/examples/netdomjoin.c @@ -0,0 +1,107 @@ +/* + * Unix SMB/CIFS implementation. + * Join Support (cmdline + netapi) + * Copyright (C) Guenther Deschner 2007 + * + * 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 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, see <http://www.gnu.org/licenses/>. + */ + +#include <sys/types.h> +#include <inttypes.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <libnetapi.h> + +char *get_string_param(const char *param) +{ + char *p; + + p = strchr(param, '='); + if (!p) { + return NULL; + } + + return (p+1); +} + +int main(int argc, char **argv) +{ + NET_API_STATUS status; + const char *server_name = NULL; + const char *domain_name = NULL; + const char *account_ou = NULL; + const char *Account = NULL; + const char *password = NULL; + uint32_t join_flags = 3; + struct libnetapi_ctx *ctx = NULL; + int i; + + status = libnetapi_init(&ctx); + if (status != 0) { + return status; + } + + if (argc < 2) { + printf("usage: netdomjoin\n"); + printf("\t[hostname=HOSTNAME] [domain=DOMAIN] <ou=OU> <usero=USERO> <passwordo=PASSWORDO> <userd=USERD> <passwordd=PASSWORDD>\n"); + return 0; + } + + if (argc > 2) { + server_name = argv[1]; + } + + for (i=0; i<argc; i++) { + if (strncasecmp(argv[i], "ou", strlen("ou")) == 0) { + account_ou = get_string_param(argv[i]); + } + if (strncasecmp(argv[i], "domain", strlen("domain"))== 0) { + domain_name = get_string_param(argv[i]); + } + if (strncasecmp(argv[i], "userd", strlen("userd"))== 0) { + Account = get_string_param(argv[i]); + } + if (strncasecmp(argv[i], "passwordd", strlen("passwordd"))== 0) { + password = get_string_param(argv[i]); + } + if (strncasecmp(argv[i], "usero", strlen("usero"))== 0) { + const char *str = NULL; + str = get_string_param(argv[i]); + libnetapi_set_username(ctx, str); + } + if (strncasecmp(argv[i], "passwordo", strlen("passwordo"))== 0) { + const char *str = NULL; + str = get_string_param(argv[i]); + libnetapi_set_password(ctx, str); + } + } + + status = NetJoinDomain(server_name, + domain_name, + account_ou, + Account, + password, + join_flags); + if (status != 0) { + printf("Join failed with: %s\n", libnetapi_errstr(ctx, status)); + } else { + printf("Successfully joined\n"); + } + + libnetapi_free(ctx); + + return status; +} |