FunctionBar* FunctionBar_new(const char** functions, const char** keys, int* events) { FunctionBar* this = xCalloc(1, sizeof(FunctionBar)); this->functions = xCalloc(16, sizeof(char*)); if (!functions) { functions = FunctionBar_FLabels; } for (int i = 0; i < 15 && functions[i]; i++) { this->functions[i] = xStrdup(functions[i]); } if (keys && events) { this->staticData = false; this->keys = xCalloc(15, sizeof(char*)); this->events = xCalloc(15, sizeof(int)); int i = 0; while (i < 15 && functions[i]) { this->keys[i] = xStrdup(keys[i]); this->events[i] = events[i]; i++; } this->size = i; } else { this->staticData = true; this->keys = (char**) FunctionBar_FKeys; this->events = FunctionBar_FEvents; this->size = 10; } return this; }
char* SolarisProcessList_readZoneName(kstat_ctl_t* kd, SolarisProcess* sproc) { char* zname; if ( sproc->zoneid == 0 ) { zname = xStrdup("global "); } else if ( kd == NULL ) { zname = xStrdup("unknown "); } else { kstat_t* ks = kstat_lookup( kd, "zones", sproc->zoneid, NULL ); zname = xStrdup(ks->ks_name); } return zname; }
char* String_getToken(const char* line, const unsigned short int numMatch) { const unsigned short int len = strlen(line); char inWord = 0; unsigned short int count = 0; char match[50]; unsigned short int foundCount = 0; for (unsigned short int i = 0; i < len; i++) { char lastState = inWord; inWord = line[i] == ' ' ? 0:1; if (lastState == 0 && inWord == 1) count++; if(inWord == 1){ if (count == numMatch && line[i] != ' ' && line[i] != '\0' && line[i] != '\n' && line[i] != (char)EOF) { match[foundCount] = line[i]; foundCount++; } } } match[foundCount] = '\0'; return((char*)xStrdup(match)); }
ListItem* ListItem_new(const char* value, int key) { ListItem* this = AllocThis(ListItem); this->value = xStrdup(value); this->key = key; this->moving = false; return this; }
static unsigned long int parseBatInfo(const char *fileName, const unsigned short int lineNum, const unsigned short int wordNum) { const char batteryPath[] = PROCDIR "/acpi/battery/"; DIR* batteryDir = opendir(batteryPath); if (!batteryDir) return 0; #define MAX_BATTERIES 64 char* batteries[MAX_BATTERIES]; unsigned int nBatteries = 0; memset(batteries, 0, MAX_BATTERIES * sizeof(char*)); struct dirent result; struct dirent* dirEntry; while (nBatteries < MAX_BATTERIES) { int err = readdir_r(batteryDir, &result, &dirEntry); if (err || !dirEntry) break; char* entryName = dirEntry->d_name; if (strncmp(entryName, "BAT", 3)) continue; batteries[nBatteries] = xStrdup(entryName); nBatteries++; } closedir(batteryDir); unsigned long int total = 0; for (unsigned int i = 0; i < nBatteries; i++) { char infoPath[30]; snprintf(infoPath, sizeof infoPath, "%s%s/%s", batteryPath, batteries[i], fileName); FILE* file = fopen(infoPath, "r"); if (!file) { break; } char line[50] = ""; for (unsigned short int i = 0; i < lineNum; i++) { char* ok = fgets(line, sizeof line, file); if (!ok) break; } fclose(file); char *foundNumStr = String_getToken(line, wordNum); const unsigned long int foundNum = atoi(foundNumStr); free(foundNumStr); total += foundNum; } for (unsigned int i = 0; i < nBatteries; i++) { free(batteries[i]); } return total; }
Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type) { Meter* this = xCalloc(1, sizeof(Meter)); Object_setClass(this, type); this->h = 1; this->param = param; this->pl = pl; type->curItems = type->maxItems; this->values = xCalloc(type->maxItems, sizeof(double)); this->total = type->total; this->caption = xStrdup(type->caption); if (Meter_initFn(this)) Meter_init(this); Meter_setMode(this, type->defaultMode); return this; }
ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr) { ColorsPanel* this = AllocThis(ColorsPanel); Panel* super = (Panel*) this; FunctionBar* fuBar = FunctionBar_new(ColorsFunctions, NULL, NULL); Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true, fuBar); this->settings = settings; this->scr = scr; Panel_setHeader(super, "Colors"); for (int i = 0; ColorSchemeNames[i] != NULL; i++) { Panel_add(super, (Object*) CheckItem_newByVal(xStrdup(ColorSchemeNames[i]), false)); } CheckItem_set((CheckItem*)Panel_get(super, settings->colorScheme), true); return this; }
int process_embeded_images(const char *boundary) { char *ib, *b, related[17], cid[17], tbuf[24], alternative[17]; Attachment *a; Sll *il, *oneline_attachment_list, *attachment_list, *embed_image_list; int rc, ic = 1; oneline_attachment_list = get_oneline_attachment_list(); attachment_list = get_attachment_list(); embed_image_list = get_embed_image_attachment_list(); if (embed_image_list == NULL) { return(0); } memset(related, 0, sizeof(related)); memset(alternative, 0, sizeof(alternative)); mutilsGenerateMIMEBoundary(related,sizeof(related)); mutilsGenerateMIMEBoundary(alternative,sizeof(alternative)); b = boundary; ib = boundary; (void) snprintf(buf, bufsz, "--%s\r\n",boundary); write_to_socket(buf); if (attachment_list || oneline_attachment_list) { b = related; ib = b; (void) snprintf(buf, bufsz, "Content-Type: multipart/related; boundary=%s\r\n",b); write_to_socket(buf); (void) snprintf(buf, bufsz, "Content-Type: multipart/alternative; boundary=%s\r\n\r\n", alternative); write_to_socket(buf); (void) snprintf(buf, bufsz, "--%s\r\n",b); write_to_socket(buf); } else { ib = alternative; (void) snprintf(buf, bufsz, "Content-Type: multipart/alternative; boundary=%s\r\n\r\n", alternative); write_to_socket(buf); (void) snprintf(buf, bufsz, "--%s\r\n",alternative); write_to_socket(buf); } write_to_socket("Content-Type: text/html; charset=ISO-8859-1\r\n\r\n"); /* write the img tags with cid */ embed_image_list = get_embed_image_attachment_list(); for (il = embed_image_list; il; il = il->next) { a = (Attachment *) il->data; mutilsGenerateMIMEBoundary(cid,sizeof(cid)); (void) snprintf(tbuf,sizeof(tbuf)-1,"ii%d_%s",ic,cid); a->content_id = xStrdup(tbuf); (void) snprintf(buf, bufsz, "<img src=\"cid:%s\" alt=\"inline image %d\"><br>\n", tbuf, ic); write_to_socket(buf); ic++; } write_to_socket("\r\n"); (void) snprintf(buf, bufsz, "--%s--\r\n",ib); write_to_socket(buf); for (il = embed_image_list; il; il = il->next) { a = (Attachment *) il->data; if (a == NULL) continue; rc = send_attachment(a,b); RETURN_IF_NOT_ZERO(rc); } (void) snprintf(buf, bufsz, "--%s--\r\n",b); write_to_socket(buf); return(0); ExitProcessing: return(-1); }
int main(int argc,char **argv) { char *x, *y, buf[BUFSIZ], encrypted_pass[128], /* 80 bytes actually */ *cipher=NULL, *option; int smtp_info=0, is_mime=0, add_dateh=1, port=(-1), rc = (-1), no_cc=1, no_bcc=1, i; char *address_file=NULL, *helo_domain=NULL, *smtp_server=NULL, *attach_file=NULL, *msg_body_file=NULL, /* back in 1.17b15 */ *the_msg=NULL, *custom_header=NULL, *to=NULL, *save_to=NULL, *save_cc=NULL, *save_bcc=NULL, *from=NULL, *sub=NULL, *cc=NULL, *bcc=NULL, *rt=NULL, *rrr=NULL; g_verbose=0; g_connect_timeout = DEFAULT_CONNECT_TIMEOUT; /* 5 secs */ g_quiet=0; g_wait_for_cr=0; g_do_auth=0; g_esmtp=0; g_auth_plain=0; g_auth_cram_md5=0; g_auth_login=0; g_do_ssl=0; g_do_starttls=0; g_log_fp = NULL; g_show_attachment_in_log = 0; g_use_protocol = MSOCK_USE_AUTO; /* detect IPv4 or IPv6 */ g_force = MUTILS_FALSE; memset(g_log_file,0,sizeof(g_log_file)); memset(g_username,0,sizeof(g_username)); memset(g_userpass,0,sizeof(g_userpass)); memset(encrypted_pass, 0, sizeof(encrypted_pass)); memset(g_from_name,0,sizeof(g_from_name)); memset(g_content_type,0,sizeof(g_content_type)); memset(g_attach_sep, 0, sizeof(g_attach_sep)); memset(g_attach_name, 0, sizeof(g_attach_name)); memset(g_content_transfer_encoding, 0, sizeof(g_content_transfer_encoding)); memset(g_mime_type, 0, sizeof(g_mime_type)); memset(g_content_id, 0, sizeof(g_content_id)); /* (void) strcpy(g_content_transfer_encoding,"base64"); */ /* no default */ (void) strcpy(g_content_disposition,"attachment"); (void) strcpy(g_attach_sep,","); (void) strcpy(g_charset,DEFAULT_CHARSET); /* No default for mime_type, we will detect from file extensinon if no mime type is specified with -mime-type */ /* (void) strcpy(g_mime_type,"text/plain"); */ for (i=1; i < argc; i++) { option=argv[i]; switch (*(option+1)) { case 'a': { if (strncmp("attach",option+1,6) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing file to attach"); rc = 1; goto ExitProcessing; } attach_file=argv[i]; add_attachment_to_list(attach_file); } } else if (strncmp("aname",option+1,5) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing attachment name"); rc = 1; goto ExitProcessing; } mutilsSafeStrcpy(g_attach_name,argv[i],sizeof(g_attach_name)-1); } } else if (strncmp("auth-plain",option+1, strlen("auth-plain"))==0) { if (*option == '-') { g_auth_plain=1; } } else if (strncmp("auth-cram-md5",option+1, strlen("auth-cram-md5"))==0) { if (*option == '-') { g_auth_cram_md5=1; } } else if (strncmp("auth-login",option+1, strlen("auth-login"))==0) { if (*option == '-') { g_auth_login=1; } } else if (strncmp("auth",option+1, strlen("auth"))==0) { if (*option == '-') { g_auth_plain=1; g_auth_login=1; g_auth_cram_md5=1; g_auth_login=1; g_do_auth=1; } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'b': { if (strncmp("bcc",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing BCc address/es"); rc = 1; goto ExitProcessing; } bcc=argv[i]; save_bcc=mutilsStrdup(bcc); /* collapse all spaces to a comma */ mutilsSpacesToChar(bcc,','); addAddressToList(bcc,"Bcc"); } else if (*option == '+') { no_bcc=1; } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case '4': { if (strncmp("4", option + 1,1) == 0) { if (*option == '-') { g_use_protocol = MSOCK_USE_IPV4; } } break; } case '6': { if (strncmp("6", option + 1,1) == 0) { if (*option == '-') { g_use_protocol = MSOCK_USE_IPV6; } } break; } case 'c': { if (strncmp("cc",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing Cc address/es"); rc = 1; goto ExitProcessing; } cc=argv[i]; save_cc=mutilsStrdup(cc); /* collapse all spaces to a comma */ mutilsSpacesToChar(cc,','); addAddressToList(cc,"Cc"); } else if (*option == '+') { no_cc=1; } } else if (strncmp("cs",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing character set"); rc = 1; goto ExitProcessing; } mutilsSafeStrcpy(g_charset,argv[i],sizeof(g_charset)-1); } } else if (strncmp("ct", option + 1, 2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing connect timeout with -ct"); rc = 1; goto ExitProcessing; } g_connect_timeout = atoi(argv[i]); } } else if (strncmp("content-type", option+1, 12)==0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing content-type value"); rc = 1; goto ExitProcessing; } mutilsSafeStrcpy(g_content_type,argv[i],sizeof(g_content_type)-1); } } else if (strncmp("content-disposition", option + 1, 12) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing content-dispostion value"); rc = 1; goto ExitProcessing; } if ((strcmp(argv[i],"inline") == 0) || strcmp(argv[i], "attachment") == 0) { mutilsSafeStrcpy(g_content_disposition,argv[i], sizeof(g_content_disposition)-1); } else { errorMsg("Invalid value for -content-disposition"); rc = 1; goto ExitProcessing; } } } else if (strncmp("content-id", option + 1, 10) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing content-id value"); rc = 1; goto ExitProcessing; } mutilsSafeStrcpy(g_content_id,argv[i],sizeof(g_content_id)-1); } } else if (strncmp("copyright", option + 1, 5) == 0) { print_copyright(); rc = 0; goto ExitProcessing; } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'D': { if (strncmp("D",option+1,1) == 0) { if (*option == '+') { add_dateh=0; } } break; } case 'd': { if (strncmp("domain",option+1,6) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing domain name"); rc = 1; goto ExitProcessing; } helo_domain=argv[i]; } } else if (strncmp("disposition", option + 1, 6) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing content dispostion value"); rc = 1; goto ExitProcessing; } if ((strcmp(argv[i],"inline") == 0) || strcmp(argv[i], "attachment") == 0) { mutilsSafeStrcpy(g_content_disposition,argv[i],sizeof(g_content_disposition)-1); } else { errorMsg("Invalid value for -disposition"); rc = 1; goto ExitProcessing; } } } break; } case 'e': { if (strncmp("example",option+1,2) == 0) { if (*option == '-') { show_examples(); rc = 1; goto ExitProcessing; } } else if (strncmp("ehlo",option+1,4) == 0) { if (*option == '-') { g_esmtp=1; } } else if (strncmp("enc-type",option+1,5) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing encoding type"); rc = 1; goto ExitProcessing; } mutilsSafeStrcpy(g_content_transfer_encoding, argv[i], sizeof(g_content_transfer_encoding)-1); } } else if (strncmp("embed-image", option + 1, 7) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing image for -embded-image"); rc = 1; goto ExitProcessing; } add_embed_image_to_attachment_list(argv[i]); /* TODO */ } } break; } case 'f': { if (strncmp("from",option+1,1) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing From address/es"); rc = 1; goto ExitProcessing; } from=argv[i]; } } break; } case 'x': { if (strncmp("xforce",option+1,1) == 0) { if (*option == '-') { g_force = MUTILS_TRUE; } } break; } case 'h': { if (strncmp("help",option+1,1) == 0) { usage(); rc = 0; goto ExitProcessing; } /* won't be here */ break; } case 'i': { if (strncmp("info",option+1,2) == 0) { smtp_info=1; } break; } case 'l': { if (strncmp("list_address",option+1,3) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing address list file"); rc = 1; goto ExitProcessing; } address_file=argv[i]; } } if (strncmp("log",option+1,3) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing address log file"); rc = 1; goto ExitProcessing; } g_log_fp = fopen(argv[i], "a"); if (g_log_fp == NULL) { errorMsg("Could not open log file %s for writing (%s)", argv[i], strerror(errno)); rc = 1; goto ExitProcessing; } /* ** tell msock lib to write error message to log file */ msock_set_logfp(g_log_fp); mutilsSafeStrcpy(g_log_file,argv[i],sizeof(g_log_file)-1); } } break; } case 'p': { if (strncmp("port",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing SMTP Port with -port"); rc = 1; goto ExitProcessing; } port=atoi(argv[i]); } } else if (strncmp("pass",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing password with -pass"); rc = 1; goto ExitProcessing; } (void) snprintf(g_userpass,sizeof(g_userpass)-1, "%s",argv[i]); } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'H': { if (strncmp("Header",option+1,1) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing custom header"); rc = 1; goto ExitProcessing; } custom_header=argv[i]; add_customer_header_to_list(custom_header); } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'M': { if (strncmp("Message",option+1,1) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing text message"); rc = 1; goto ExitProcessing; } the_msg=xStrdup(argv[i]); add_oneline_to_attachment_list(the_msg); } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'm': { if (strncmp("mime-type",option+1,9) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing mime type"); rc = 1; goto ExitProcessing; } mutilsSafeStrcpy(g_mime_type,argv[i],sizeof(g_mime_type)-1); } } else if (strncmp("msg-body",option+1,5) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing path of message body file"); rc = 1; goto ExitProcessing; } msg_body_file = argv[i]; add_msg_body_to_attachment_list(argv[i]); } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'n': { if (strncmp("name",option+1,3) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing Name with -n"); rc = 1; goto ExitProcessing; } (void) snprintf(g_from_name,sizeof(g_from_name)-1, "%s",argv[i]); } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 's': { if (strncmp("smtp",option+1,3) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing smtp server"); rc = 1; goto ExitProcessing; } smtp_server=argv[i]; } } else if (strncmp("subject",option+1,3) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing subject with -sub"); rc = 1; goto ExitProcessing; } sub=argv[i]; } } else if (strncmp("ssl", option + 1, 3) == 0) { #ifdef HAVE_OPENSSL g_do_ssl=1; #else (void) fprintf(stderr,"Error: '-ssl' not available, not compiled with OpenSSL\n"); rc = 1; goto ExitProcessing; #endif /* HAVE_OPENSSL */ } else if (strncmp("starttls",option+1,3) == 0) { #ifdef HAVE_OPENSSL g_do_starttls=1; #else (void) fprintf(stderr,"Error: '-starttls' not available, not compiled with OpenSSL\n"); rc = 1; goto ExitProcessing; #endif /* HAVE_OPENSSL */ } else if (strncmp("show-attach", option + 1, 9) == 0) { g_show_attachment_in_log = 1; } else if (strncmp("show-mime-types",option+1,9) == 0) { show_mime_types(); rc = 0; goto ExitProcessing; } else if (strncmp("separator", option + 1, 4) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing separator"); rc = 1; goto ExitProcessing; } (void) snprintf(g_attach_sep,sizeof(g_attach_sep)-1,"%s",argv[i]); if (strlen(g_attach_sep) != 1) { errorMsg("Invalid separator character specified"); rc = 1; goto ExitProcessing; } } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'u': { if (strncmp("user",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { errorMsg("Missing smtp server"); rc = 1; goto ExitProcessing; } (void) snprintf(g_username,sizeof(g_username)-1, "%s",argv[i]); } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'v': { if (strncmp("verbose",option+1,1) == 0) { if (*option == '-') { g_verbose=1; msock_set_debug(g_verbose); } } break; } case 'q': { if (strncmp("quiet",option+1,1) == 0) { if (*option == '-') { g_quiet=1; } } break; } case 'V': { (void) fprintf(stderr,"mailsend Version: %.1024s\n",MAILSEND_VERSION); #ifdef HAVE_OPENSSL (void) fprintf(stderr,"Compiled with OpenSSL: %s\n", SSLeay_version(SSLEAY_VERSION)); #else (void) fprintf(stderr,"Not Compiled OpenSSL, some auth methods will be unavailable\n"); #endif /* ! HAVE_OPENSSL */ rc = 0; goto ExitProcessing; break; } case 't': { if (strncmp("to",option+1,1) == 0) { if (*option == '-') { i++; if (i == argc) { (void) fprintf(stderr,"Error: missing to addresses\n"); rc = 1; goto ExitProcessing; } to=argv[i]; save_to=mutilsStrdup(to); if (save_to == NULL) { errorMsg("memory allocation problem for -to"); rc = 1; goto ExitProcessing; } save_to=fix_to(save_to); to=fix_to(to); /* collapse all spaces to a comma */ mutilsSpacesToChar(to,','); /* add addresses to a singly linked list */ addAddressToList(to,"To"); /* Note: to is modifed now! */ } } break; } case 'r': { if (strncmp("rrr",option+1,3) == 0) { if (*option == '-') { i++; if (i == argc) { (void) fprintf(stderr,"Error: missing to addresses for -rrr\n"); rc = 1; goto ExitProcessing; } rrr=mutilsStrdup(argv[i]); if (rrr == NULL) { errorMsg("memory allocation problem for -rrr"); rc = 1; goto ExitProcessing; } } } else if (strncmp("rt",option+1,2) == 0) { if (*option == '-') { i++; if (i == argc) { (void) fprintf(stderr,"Error: missing to addresses for -rt\n"); rc = 1; goto ExitProcessing; } rt=mutilsStrdup(argv[i]); if (rt == NULL) { errorMsg("memory allocation problem for -rt"); rc = 1; goto ExitProcessing; } } } else { errorMsg("Unknown flag: %s\n",option); rc = 1; goto ExitProcessing; } break; } case 'w': { if (strncmp("wait",option+1,1) == 0) { if (*option == '-') { g_wait_for_cr=1; } } break; } default: { (void) fprintf(stderr,"Error: Unrecognized option: %s\n", option); rc = 1; goto ExitProcessing; } } } x=getenv("SMTP_USER_PASS"); y=NULL; if (x && y) { (void) fprintf(stderr,"SMTP_USER_PASS and SMTP_USER_PASS_ENC can not be set. Exiting..\n"); rc = 1; goto ExitProcessing; } if (x) { if (*g_userpass == '\0') { (void) snprintf(g_userpass,sizeof(g_userpass)-1,"%s",x); } } #ifdef HAVE_OPENSSL if (g_do_ssl && g_do_starttls) { (void) fprintf(stderr,"Options -ssl and -starttls are mutually exclusive\n"); rc = 1; goto ExitProcessing; } #endif /* HAVE_OPENSSL */ initialize_openssl(cipher); if (port == -1) port=MAILSEND_SMTP_PORT; if (smtp_info) { if (smtp_server == NULL) smtp_server="localhost"; } if (smtp_info && smtp_server) { if (helo_domain == NULL) helo_domain="localhost"; rc = show_smtp_info(smtp_server,port,helo_domain); if (rc < 0) rc = 1; goto ExitProcessing; } /* print_attachment_list(); print_oneline_attachment_list(); */ /* ** attaching a file or a one line message will make the mail a ** MIME mail */ if (attach_file || the_msg || msg_body_file) { is_mime=1; } if (smtp_server == NULL) { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"SMTP server address/IP: ",EMPTY_NOT_OK); if (x) smtp_server=xStrdup(x); } if (helo_domain == NULL) { /* memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"Domain: ",EMPTY_NOT_OK); if (x) helo_domain=xStrdup(x); */ /* use localhost */ helo_domain=xStrdup("localhost"); } if (from == NULL) { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"From: ",EMPTY_NOT_OK); if (x) from=xStrdup(x); } /* if address file specified, add the addresses to the list as well */ if (address_file != NULL) { addAddressesFromFileToList(address_file); printAddressList(); } /* ** The To address must be speicifed, even if the file with the list of ** addresses is specified. The specified To will be shown in the ** envelope. None of the To, Cc and Bcc from the address list file will ** be shown anywhre.. that's how I like it. I hate long To, Cc or Bcc. ** [email protected], Thu Mar 29 11:56:45 EST 2001 */ if (save_to == NULL) { /* don't ask for To add addresses are specified with -l file */ if (getAddressList() == NULL) { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"To: ",EMPTY_NOT_OK); if (x) { save_to=xStrdup(x); addAddressToList(x,"To"); } } } /* ** if msg file specified, dont ask for unneeded things, as it could ** be used from other programs, and it will wait for input ** [email protected] Tue Apr 10 18:02:12 EST 2001 */ #ifdef WINNT if (attach_file == NULL && isInConsole(_fileno(stdin))) #else if (attach_file == NULL && isatty(fileno(stdin))) #endif /* WINNT */ { if (save_cc == NULL && !no_cc) { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"Carbon copy: ",EMPTY_OK); if (x) { save_cc=xStrdup(x); addAddressToList(x,"Cc"); } } if (save_bcc == NULL && ! no_bcc) { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"Blind Carbon copy: ",EMPTY_OK); if (x) { save_bcc=xStrdup(x); addAddressToList(x,"BCc"); } } if (sub == NULL) { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"Subject: ",EMPTY_OK); if (x) sub=xStrdup(x); } if (g_do_ssl || g_do_starttls) { if (*g_username == '\0') { memset(buf,0,sizeof(buf)); x=askFor(buf,sizeof(buf)-1,"Auth user: "******"%s",x); } } if (*g_userpass == '\0') { (void) fprintf(stderr,"\nPlease specify auth password with -pass\n"); (void) fprintf(stderr,"Or by environment variable SMTP_USER_PASS\n"); rc = 1; goto ExitProcessing; } } } rc=validateMusts(from,save_to,smtp_server,helo_domain); if (rc != 0) { rc = 1; goto ExitProcessing; } #ifdef UNIX signal(SIGPIPE,SIG_IGN); #endif /* UNIX */ #if 0 { MutilsTime mt; char timebuf[64]; mutils_time_now(&mt); mutils_time_fmt(&mt, timebuf, sizeof(timebuf)); (void) fprintf(stderr,"timebuf: %s\n",timebuf); return 1; } #endif /* 0 */ write_log("mailsend v%s\n",MAILSEND_VERSION); rc=send_the_mail(from,save_to,save_cc,save_bcc,sub,smtp_server,port, helo_domain,attach_file,msg_body_file,the_msg,is_mime,rrr,rt,add_dateh); if (rc == 0) { if (isInteractive()) { if (!g_quiet) { (void) printf("Mail sent successfully\n"); (void) fflush(stdout); } } if (!g_quiet) { write_log("Mail sent successfully\n"); } } else { if (isInteractive()) { (void) printf("Could not send mail\n"); } write_log("Could not send mail\n"); } if (isInteractive()) { if (g_wait_for_cr) { printf("\nPress Enter to Exit: "); x=fgets(buf,sizeof(buf)-1,stdin); } } if (rc != 0) { rc = 1; } ExitProcessing: close_log(); return (rc); }
int SolarisProcessList_walkproc(psinfo_t *_psinfo, lwpsinfo_t *_lwpsinfo, void *listptr) { struct timeval tv; struct tm date; bool preExisting; pid_t getpid; // Setup process list ProcessList *pl = (ProcessList*) listptr; SolarisProcessList *spl = (SolarisProcessList*) listptr; id_t lwpid_real = _lwpsinfo->pr_lwpid; if (lwpid_real > 1023) return 0; pid_t lwpid = (_psinfo->pr_pid * 1024) + lwpid_real; bool onMasterLWP = (_lwpsinfo->pr_lwpid == _psinfo->pr_lwp.pr_lwpid); if (onMasterLWP) { getpid = _psinfo->pr_pid * 1024; } else { getpid = lwpid; } Process *proc = ProcessList_getProcess(pl, getpid, &preExisting, (Process_New) SolarisProcess_new); SolarisProcess *sproc = (SolarisProcess*) proc; gettimeofday(&tv, NULL); // Common code pass 1 proc->show = false; sproc->taskid = _psinfo->pr_taskid; sproc->projid = _psinfo->pr_projid; sproc->poolid = _psinfo->pr_poolid; sproc->contid = _psinfo->pr_contract; proc->priority = _lwpsinfo->pr_pri; proc->nice = _lwpsinfo->pr_nice; proc->processor = _lwpsinfo->pr_onpro; proc->state = _lwpsinfo->pr_sname; // NOTE: This 'percentage' is a 16-bit BINARY FRACTIONS where 1.0 = 0x8000 // Source: https://docs.oracle.com/cd/E19253-01/816-5174/proc-4/index.html // (accessed on 18 November 2017) proc->percent_mem = ((uint16_t)_psinfo->pr_pctmem/(double)32768)*(double)100.0; proc->st_uid = _psinfo->pr_euid; proc->pgrp = _psinfo->pr_pgid; proc->nlwp = _psinfo->pr_nlwp; proc->tty_nr = _psinfo->pr_ttydev; proc->m_resident = _psinfo->pr_rssize/PAGE_SIZE_KB; proc->m_size = _psinfo->pr_size/PAGE_SIZE_KB; if (!preExisting) { sproc->realpid = _psinfo->pr_pid; sproc->lwpid = lwpid_real; sproc->zoneid = _psinfo->pr_zoneid; sproc->zname = SolarisProcessList_readZoneName(spl->kd,sproc); proc->user = UsersTable_getRef(pl->usersTable, proc->st_uid); proc->comm = xStrdup(_psinfo->pr_fname); proc->commLen = strnlen(_psinfo->pr_fname,PRFNSZ); } // End common code pass 1 if (onMasterLWP) { // Are we on the representative LWP? proc->ppid = (_psinfo->pr_ppid * 1024); proc->tgid = (_psinfo->pr_ppid * 1024); sproc->realppid = _psinfo->pr_ppid; // See note above (in common section) about this BINARY FRACTION proc->percent_cpu = ((uint16_t)_psinfo->pr_pctcpu/(double)32768)*(double)100.0; proc->time = _psinfo->pr_time.tv_sec; if(!preExisting) { // Tasks done only for NEW processes sproc->is_lwp = false; proc->starttime_ctime = _psinfo->pr_start.tv_sec; } // Update proc and thread counts based on settings if (sproc->kernel && !pl->settings->hideKernelThreads) { pl->kernelThreads += proc->nlwp; pl->totalTasks += proc->nlwp+1; if (proc->state == 'O') pl->runningTasks++; } else if (!sproc->kernel) { if (proc->state == 'O') pl->runningTasks++; if (pl->settings->hideUserlandThreads) { pl->totalTasks++; } else { pl->userlandThreads += proc->nlwp; pl->totalTasks += proc->nlwp+1; } } proc->show = !(pl->settings->hideKernelThreads && sproc->kernel); } else { // We are not in the master LWP, so jump to the LWP handling code proc->percent_cpu = ((uint16_t)_lwpsinfo->pr_pctcpu/(double)32768)*(double)100.0; proc->time = _lwpsinfo->pr_time.tv_sec; if (!preExisting) { // Tasks done only for NEW LWPs sproc->is_lwp = true; proc->basenameOffset = -1; proc->ppid = _psinfo->pr_pid * 1024; proc->tgid = _psinfo->pr_pid * 1024; sproc->realppid = _psinfo->pr_pid; proc->starttime_ctime = _lwpsinfo->pr_start.tv_sec; } // Top-level process only gets this for the representative LWP if (sproc->kernel && !pl->settings->hideKernelThreads) proc->show = true; if (!sproc->kernel && !pl->settings->hideUserlandThreads) proc->show = true; } // Top-level LWP or subordinate LWP // Common code pass 2 if (!preExisting) { if ((sproc->realppid <= 0) && !(sproc->realpid <= 1)) { sproc->kernel = true; } else { sproc->kernel = false; } (void) localtime_r((time_t*) &proc->starttime_ctime, &date); strftime(proc->starttime_show, 7, ((proc->starttime_ctime > tv.tv_sec - 86400) ? "%R " : "%b%d "), &date); ProcessList_add(pl, proc); } proc->updated = true; // End common code pass 2 return 0; }