bd211b8556ef6b18ebf137419bd5555d65271664semery/*
bd211b8556ef6b18ebf137419bd5555d65271664semery * CDDL HEADER START
bd211b8556ef6b18ebf137419bd5555d65271664semery *
bd211b8556ef6b18ebf137419bd5555d65271664semery * The contents of this file are subject to the terms of the
bd211b8556ef6b18ebf137419bd5555d65271664semery * Common Development and Distribution License (the "License").
bd211b8556ef6b18ebf137419bd5555d65271664semery * You may not use this file except in compliance with the License.
bd211b8556ef6b18ebf137419bd5555d65271664semery *
bd211b8556ef6b18ebf137419bd5555d65271664semery * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
bd211b8556ef6b18ebf137419bd5555d65271664semery * or http://www.opensolaris.org/os/licensing.
bd211b8556ef6b18ebf137419bd5555d65271664semery * See the License for the specific language governing permissions
bd211b8556ef6b18ebf137419bd5555d65271664semery * and limitations under the License.
bd211b8556ef6b18ebf137419bd5555d65271664semery *
bd211b8556ef6b18ebf137419bd5555d65271664semery * When distributing Covered Code, include this CDDL HEADER in each
bd211b8556ef6b18ebf137419bd5555d65271664semery * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
bd211b8556ef6b18ebf137419bd5555d65271664semery * If applicable, add the following below this CDDL HEADER, with the
bd211b8556ef6b18ebf137419bd5555d65271664semery * fields enclosed by brackets "[]" replaced with your own identifying
bd211b8556ef6b18ebf137419bd5555d65271664semery * information: Portions Copyright [yyyy] [name of copyright owner]
bd211b8556ef6b18ebf137419bd5555d65271664semery *
bd211b8556ef6b18ebf137419bd5555d65271664semery * CDDL HEADER END
bd211b8556ef6b18ebf137419bd5555d65271664semery */
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery/*
bd211b8556ef6b18ebf137419bd5555d65271664semery * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
bd211b8556ef6b18ebf137419bd5555d65271664semery * Use is subject to license terms.
bd211b8556ef6b18ebf137419bd5555d65271664semery */
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery#pragma ident "%Z%%M% %I% %E% SMI"
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <stdio.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <stdlib.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <strings.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <locale.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <netdb.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <limits.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery#include <smbsrv/libsmbns.h>
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery#define QUOTE(x) #x
bd211b8556ef6b18ebf137419bd5555d65271664semery#define VAL2STR(x) QUOTE(x)
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semerychar *whoami = NULL;
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semerystatic void usage();
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semerystatic
bd211b8556ef6b18ebf137419bd5555d65271664semeryvoid
bd211b8556ef6b18ebf137419bd5555d65271664semeryusage()
bd211b8556ef6b18ebf137419bd5555d65271664semery{
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr,
bd211b8556ef6b18ebf137419bd5555d65271664semery gettext("Usage: %s [ -d fqdn ] [ -s server ]\n"), whoami);
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr,
bd211b8556ef6b18ebf137419bd5555d65271664semery gettext("\t-d\tThe fully qualified domain of the client\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr, gettext("\t-s\tThe domain controller to join\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr,
bd211b8556ef6b18ebf137419bd5555d65271664semery gettext("\tstdin is used to read in the password or \n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr, gettext("\tthe password is prompted for.\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery exit(1);
bd211b8556ef6b18ebf137419bd5555d65271664semery}
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semeryint
bd211b8556ef6b18ebf137419bd5555d65271664semerymain(int argc, char **argv)
bd211b8556ef6b18ebf137419bd5555d65271664semery{
bd211b8556ef6b18ebf137419bd5555d65271664semery char c, fqdn[MAXHOSTNAMELEN], server[MAXHOSTNAMELEN];
bd211b8556ef6b18ebf137419bd5555d65271664semery char *newpw;
bd211b8556ef6b18ebf137419bd5555d65271664semery int ret = 0;
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery (void) setlocale(LC_ALL, "");
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery#if !defined(TEXT_DOMAIN)
bd211b8556ef6b18ebf137419bd5555d65271664semery#define TEXT_DOMAIN "SYS_TEST"
bd211b8556ef6b18ebf137419bd5555d65271664semery#endif /* TEXT_DOMAIN */
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery (void) textdomain(TEXT_DOMAIN);
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery whoami = argv[0];
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery while ((c = getopt(argc, argv, "d:s:")) != -1) {
bd211b8556ef6b18ebf137419bd5555d65271664semery switch (c) {
bd211b8556ef6b18ebf137419bd5555d65271664semery case 'd':
bd211b8556ef6b18ebf137419bd5555d65271664semery (void) strncpy(fqdn, optarg, sizeof (fqdn));
bd211b8556ef6b18ebf137419bd5555d65271664semery break;
bd211b8556ef6b18ebf137419bd5555d65271664semery case 's':
bd211b8556ef6b18ebf137419bd5555d65271664semery (void) strncpy(server, optarg, sizeof (server));
bd211b8556ef6b18ebf137419bd5555d65271664semery break;
bd211b8556ef6b18ebf137419bd5555d65271664semery default:
bd211b8556ef6b18ebf137419bd5555d65271664semery usage();
bd211b8556ef6b18ebf137419bd5555d65271664semery break;
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery if (argc != optind)
bd211b8556ef6b18ebf137419bd5555d65271664semery usage();
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery if (!isatty(fileno(stdin))) {
bd211b8556ef6b18ebf137419bd5555d65271664semery char buf[PASS_MAX + 1];
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery if (scanf("%" VAL2STR(PASS_MAX) "s", &buf) != 1) {
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr,
bd211b8556ef6b18ebf137419bd5555d65271664semery gettext("Couldn't read new password\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery exit(1);
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery newpw = strdup(buf);
bd211b8556ef6b18ebf137419bd5555d65271664semery if (newpw == NULL) {
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr, gettext("Couldn't allocate memory\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery exit(1);
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery } else {
bd211b8556ef6b18ebf137419bd5555d65271664semery newpw = getpassphrase(gettext("Enter new password: "));
bd211b8556ef6b18ebf137419bd5555d65271664semery if (newpw == NULL) {
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr,
bd211b8556ef6b18ebf137419bd5555d65271664semery gettext("Couldn't read new password\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery exit(1);
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery newpw = strdup(newpw);
bd211b8556ef6b18ebf137419bd5555d65271664semery if (newpw == NULL) {
bd211b8556ef6b18ebf137419bd5555d65271664semery fprintf(stderr, gettext("Couldn't allocate memory\n"));
bd211b8556ef6b18ebf137419bd5555d65271664semery exit(1);
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery }
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery /*
bd211b8556ef6b18ebf137419bd5555d65271664semery * Set the SMF properties for smb for later use.
bd211b8556ef6b18ebf137419bd5555d65271664semery */
bd211b8556ef6b18ebf137419bd5555d65271664semery ret = smb_setdomainprops(fqdn, server, newpw);
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery free(newpw);
bd211b8556ef6b18ebf137419bd5555d65271664semery
bd211b8556ef6b18ebf137419bd5555d65271664semery return (ret);
bd211b8556ef6b18ebf137419bd5555d65271664semery}