1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* 28 * Helper functions for standalone functionality 29 */ 30 31 #include <assert.h> 32 #include <libintl.h> 33 #include <strings.h> 34 #include "ns_sldap.h" 35 #include "ns_internal.h" 36 37 ns_standalone_conf_t standaloneDefaults = 38 { {NULL, /* A directory server's IP/name. No default. */ 39 0, /* A directory server's port. No default. */ 40 NULL, /* A domain name. */ 41 /* libsldap uses its own default. */ 42 "default", /* A DUAProfile's name. */ 43 NULL, /* Authentication information used. */ 44 /* If not specified by the user, */ 45 /* libsldap will use its own data */ 46 NULL, /* A credential level to be used */ 47 /* along with the authentication info. */ 48 /* See the previous comment. */ 49 NSLDAPDIRECTORY, /* The default path to */ 50 /* the certificate database. */ 51 NULL, /* A bind DN to be used during */ 52 /* subsequent LDAP Bind requests */ 53 NULL}, /* A bind password to be used during */ 54 /* subsequent LDAP Bind requests */ 55 NS_CACHEMGR}; /* If the -H option is not given, libsldap */ 56 /* will obtain all the configuration */ 57 /* information from ldap_cachemgr. */ 58 59 int 60 separatePort(char *peer, char **name, uint16_t *port) 61 { 62 char *chr, *portStr = NULL; 63 64 chr = strchr(peer, '['); 65 if (chr != NULL) { 66 /* An IPv6 address */ 67 *name = chr + 1; 68 69 chr = strchr(peer, ']'); 70 if (chr == NULL) { 71 (void) fprintf(stderr, 72 gettext("Server address is wrong: " 73 "unbalanced [\n")); 74 return (1); 75 } 76 77 *chr++ = '\0'; 78 79 chr = strchr(chr, ':'); 80 if (chr != NULL && *(chr + 1) != '\0') { 81 portStr = chr + 1; 82 } 83 } else { 84 /* An IPv4 address */ 85 chr = strchr(peer, ']'); 86 if (chr != NULL) { 87 (void) fprintf(stderr, 88 gettext("Server address is wrong: " 89 "unbalanced ]\n")); 90 return (1); 91 } 92 93 chr = strchr(peer, ':'); 94 if (chr != NULL && *(chr + 1) != '\0') { 95 *chr++ = '\0'; 96 portStr = chr; 97 } 98 99 *name = peer; 100 } 101 102 if ((*name)[0] == '\0') { 103 (void) fprintf(stderr, 104 gettext("Server address or name must be" 105 " specified.\n")); 106 return (1); 107 } 108 109 if (portStr && sscanf(portStr, "%hu", port) != 1) { 110 (void) fprintf(stderr, 111 gettext("Server port is wrong. " 112 "The default port 389/636 " 113 "will be used.\n")); 114 } 115 return (0); 116 } 117 118 char * 119 readPwd(char *pwd_file) 120 { 121 FILE *f; 122 char *pwd; 123 char passwdBuf[BUFSIZE]; 124 125 if ((f = fopen(pwd_file, "r")) == NULL) { 126 (void) fprintf(stderr, 127 gettext("Unable to open '%s' file\n"), pwd_file); 128 return (NULL); 129 } 130 if (fgets(passwdBuf, BUFSIZE, f) == NULL) { 131 (void) fprintf(stderr, 132 gettext("Unable to read '%s' file\n"), pwd_file); 133 (void) fclose(f); 134 return (NULL); 135 } 136 137 (void) fclose(f); 138 139 if (passwdBuf[strlen(passwdBuf) - 1] == '\n') { 140 passwdBuf[strlen(passwdBuf) - 1] = '\0'; 141 } 142 if ((pwd = strdup(passwdBuf)) == NULL) { 143 (void) fprintf(stderr, 144 gettext("Memory allocation error\n")); 145 return (NULL); 146 } 147 148 return (pwd); 149 } 150