int main (unsigned int argc, char **argv) { process_arguments(argc, argv); /* g_module, db_name side-effected */ #ifdef _DBG_PRINT dbrecftos("/tmp/msg"); #endif dbproc = mydblogin(); if (dbproc == NULL) { fprintf(stderr, "Unable to log into DB. Exiting.\n"); exit(1); } initialize_message_system("UTL", dbproc); /* a lie, but... */ if(em_initialize_severity_codes(dbproc) == FAILURE) { fprintf(stderr,"Severity codes initialization failed. Exiting.\n"); exit(1); } if((nmodule_names = initialize_module_names(dbproc, &module_names)) < 0) { fprintf(stderr,"Module names initialization failed. Exiting.\n"); exit(1); } if (!g_module[0]) /* No module given. Select "All". */ strcpy(g_module, ALL); else { /* module name not specified */ /* * Check if module name given is legal. * If not, issue a message and exit. */ int i; for (i = 0; i < nmodule_names; i++) if (!strcmp(g_module, module_names[i])) break; if (i == nmodule_names) { /* module not found */ fprintf(stderr, "Unknown module name '%s.' Allowed modules are:\n\t", g_module); for (i = 0; i < nmodule_names; i++) if (strcmp(module_names[i], ALL)) fprintf(stderr, " %s ", module_names[i]); fputc('\n', stderr); exit(1); } } XtToolkitInitialize (); app_context = XtCreateApplicationContext(); display = XtOpenDisplay(app_context, NULL, argv[0], "EditMessage", NULL, 0, &argc, argv); if (!display) { fprintf(stderr, "%s: can't open display, exiting...\n", argv[0]); exit (1); } XmRegisterConverters(); XtAddConverter (XmRString, XmRUnitType, XmCvtStringToUnitType, NULL, 0); create_appShell ( display, argv[0], argc, argv ); /* Cache the chosen module, for callbacks. We could just use the set_module() callback, but that swaps labels etc. and we're cheap. */ initialize_default_module(g_module); XtRealizeWidget(appShell); XtAppMainLoop(app_context); exit(0); /* never get here */ }
int read_login_info(int argc, char **argv) { int len; FILE *in = NULL; #if !defined(__MINGW32__) && !defined(_MSC_VER) int ch; #endif char line[512]; char *s1, *s2; char filename[PATH_MAX]; static const char *PWD = "../../../PWD"; struct { char *username, *password, *servername, *database; char fverbose; } options; #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_STACK) #define MAX_STACK (8*1024*1024) struct rlimit rlim; if (!getrlimit(RLIMIT_STACK, &rlim) && (rlim.rlim_cur == RLIM_INFINITY || rlim.rlim_cur > MAX_STACK)) { rlim.rlim_cur = MAX_STACK; setrlimit(RLIMIT_STACK, &rlim); } #endif setbuf(stdout, NULL); setbuf(stderr, NULL); free(ARGV0); #ifdef __VMS { /* basename expects unix format */ s1 = strrchr(argv[0], ';'); /* trim version; extension trimmed later */ if (s1) *s1 = 0; const char *unixspec = decc$translate_vms(argv[0]); ARGV0 = strdup(unixspec); } #else ARGV0 = strdup(argv[0]); #endif BASENAME = tds_basename(ARGV0); #if defined(_WIN32) || defined(__VMS) s1 = strrchr(BASENAME, '.'); if (s1) *s1 = 0; #endif DIRNAME = dirname(ARGV0); memset(&options, 0, sizeof(options)); #if !defined(__MINGW32__) && !defined(_MSC_VER) /* process command line options (handy for manual testing) */ while ((ch = getopt(argc, (char**)argv, "U:P:S:D:f:v")) != -1) { switch (ch) { case 'U': options.username = strdup(optarg); break; case 'P': options.password = strdup(optarg); break; case 'S': options.servername = strdup(optarg); break; case 'D': options.database = strdup(optarg); break; case 'f': /* override default PWD file */ PWD = strdup(optarg); break; case 'v': options.fverbose = 1; /* doesn't normally do anything */ break; case '?': default: fprintf(stderr, "usage: %s \n" " [-U username] [-P password]\n" " [-S servername] [-D database]\n" " [-i input filename] [-o output filename] " "[-e error filename]\n" , BASENAME); exit(1); } } #endif strcpy(filename, PWD); s1 = getenv("TDSPWDFILE"); if (s1 && s1[0]) in = fopen(s1, "r"); if (!in) in = fopen(filename, "r"); if (!in) in = fopen("PWD", "r"); if (!in) { sprintf(filename, "%s/%s", (DIRNAME) ? DIRNAME : ".", PWD); in = fopen(filename, "r"); if (!in) { fprintf(stderr, "Can not open %s file\n\n", filename); goto Override; } } while (fgets(line, 512, in)) { s1 = strtok(line, "="); s2 = strtok(NULL, "\n"); if (!s1 || !s2) continue; if (!strcmp(s1, "UID")) { strcpy(USER, s2); } else if (!strcmp(s1, "SRV")) { strcpy(SERVER, s2); } else if (!strcmp(s1, "PWD")) { strcpy(PASSWORD, s2); } else if (!strcmp(s1, "DB")) { strcpy(DATABASE, s2); } } fclose(in); Override: /* apply command-line overrides */ if (options.username) { strcpy(USER, options.username); free(options.username); } if (options.password) { strcpy(PASSWORD, options.password); free(options.password); } if (options.servername) { strcpy(SERVER, options.servername); free(options.servername); } if (options.database) { strcpy(DATABASE, options.database); free(options.database); } if (!*SERVER) { fprintf(stderr, "no servername provided, quitting.\n"); exit(1); } printf("found %s.%s for %s in \"%s\"\n", SERVER, DATABASE, USER, filename); #if 0 dbrecftos(BASENAME); #endif len = snprintf(sql_file, sizeof(sql_file), "%s/%s.sql", FREETDS_SRCDIR, BASENAME); assert(len >= 0 && len <= sizeof(sql_file)); if (input_file) fclose(input_file); if ((input_file = fopen(sql_file, "r")) == NULL) { fflush(stdout); fprintf(stderr, "could not open SQL input file \"%s\"\n", sql_file); } if (!free_file_registered) atexit(free_file); free_file_registered = 1; printf("SQL text will be read from %s\n", sql_file); return 0; }