LOGINREC * get_login(int argc, char *argv[], OPTIONS *options) { LOGINREC *login; int ch; char *username = NULL, *password = NULL; extern char *optarg; assert(options && argv); options->appname = basename(argv[0]); options->colsep = default_colsep; /* may be overridden by -t */ login = dblogin(); if (!login) { fprintf(stderr, "%s: unable to allocate login structure\n", options->appname); exit(1); } DBSETLAPP(login, options->appname); options->servername = getenv("DSQUERY"); while ((ch = getopt(argc, argv, "U:P:R:S:d:D:i:o:e:t:H:hqv")) != -1) { switch (ch) { case 'U': free(username); username = strdup(optarg); break; case 'R': parse_pivot_description(options, optarg); break; case 'P': free(password); password = tds_getpassarg(optarg); break; case 'S': options->servername = strdup(optarg); break; case 'd': case 'D': options->database = strdup(optarg); break; case 'i': options->input_filename = strdup(optarg); break; case 'o': options->output_filename = strdup(optarg); break; case 'e': options->error_filename = strdup(optarg); break; case 't': unescape(optarg); options->colsep = strdup(optarg); break; case 'h': options->headers = stdout; break; case 'H': strlcpy(options->hostname, optarg, sizeof(options->hostname)); break; case 'q': options->fquiet = 1; break; case 'v': options->fverbose = 1; break; case '?': default: usage(options->appname); exit(1); } } if (username) DBSETLUSER(login, username); if( !options->hostname[0] ) { if (-1 == gethostname(options->hostname, sizeof(options->hostname))) { perror("unable to get hostname"); } } if( options->hostname[0] ) { DBSETLHOST(login, options->hostname); } /* Look for a password if a username was provided, else assume domain login */ if (password) { DBSETLPWD(login, password); memset(password, 0, strlen(password)); } else if (username) { char password[128]; readpassphrase("Password: ", password, sizeof(password), RPP_ECHO_OFF); DBSETLPWD(login, password); } if (!options->servername) { usage(options->appname); exit(1); } return login; }
static void populate_login(TDSLOGIN * login, int argc, char **argv) { const TDS_COMPILETIME_SETTINGS *settings; char *hostname = NULL, *servername = NULL; char *username = NULL, *password = NULL; char *confile = NULL; const char *appname = "TSQL"; int opt, port=0, use_domain_login=0; const char *charset = NULL; char *opt_flags_str = NULL; while ((opt = getopt(argc, argv, "a:H:S:I:J:P:U:p:Co:t:r:D:Lv")) != -1) { switch (opt) { case 'a': appname = optarg; break; case 't': opt_col_term = strdup(optarg); break; case 'r': opt_row_term = strdup(optarg); break; case 'D': opt_default_db = strdup(optarg); break; case 'o': opt_flags_str = optarg; break; case 'H': free(hostname); hostname = strdup(optarg); break; case 'S': free(servername); servername = strdup(optarg); break; case 'U': free(username); username = strdup(optarg); break; case 'P': free(password); password = tds_getpassarg(optarg); break; case 'I': free(confile); confile = strdup(optarg); break; case 'J': charset = strdup(optarg); break; case 'p': port = atoi(optarg); break; case 'L': global_opt_flags |= OPT_INSTANCES; break; case 'v': global_opt_flags |= OPT_VERBOSE; break; case 'C': settings = tds_get_compiletime_settings(); printf("%s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n%35s: %s\n", "Compile-time settings (established with the \"configure\" script)", "Version", settings->freetds_version, "freetds.conf directory", settings->sysconfdir, /* settings->last_update */ "MS db-lib source compatibility", settings->msdblib ? "yes" : "no", "Sybase binary compatibility", (settings->sybase_compat == -1 ? "unknown" : (settings->sybase_compat ? "yes" : "no")), "Thread safety", settings->threadsafe ? "yes" : "no", "iconv library", settings->libiconv ? "yes" : "no", "TDS version", settings->tdsver, "iODBC", settings->iodbc ? "yes" : "no", "unixodbc", settings->unixodbc ? "yes" : "no", "SSPI \"trusted\" logins", have_sspi, "Kerberos", enable_krb5, "OpenSSL", settings->openssl ? "yes" : "no", "GnuTLS", settings->gnutls ? "yes" : "no", "MARS", settings->mars ? "yes" : "no"); exit(0); break; default: tsql_print_usage(argv[0]); exit(1); break; } } if (opt_flags_str != NULL) { char *minus_flags = malloc(strlen(opt_flags_str) + 5); if (minus_flags != NULL) { strcpy(minus_flags, "go -"); strcat(minus_flags, opt_flags_str); get_opt_flags(minus_flags, &global_opt_flags); free(minus_flags); } } if ((global_opt_flags & OPT_INSTANCES) && hostname) { static const char template[] = "%s.instances";