Exemplo n.º 1
0
/* 
 * Return a malloc'd utf8-encoded char * of the provided environment 
 * variable. The env_variable argument is assumed not to be UTF-8.  Returns
 * NULL if no such environment variable.
 *
 * We'll pretty much swap out getenv's where convenient.  Windows pretty
 * much doesn't want to do getenv once we do unicode
 */
char *
our_getenv(char *env_variable)
{
#ifdef _WINDOWS
    TCHAR lptstr_env_variable[MAXPATH+1], *p;
    int i;

    for(i = 0; env_variable[i] && i < MAXPATH; i++)
      lptstr_env_variable[i] = env_variable[i];
    lptstr_env_variable[i] = '\0';
    if(p = _tgetenv(lptstr_env_variable))
      return(lptstr_to_utf8(p));
    else
      return(NULL);
#else /* !_WINDOWS */
    char *p, *utf8_p, *env_cpy;
    size_t len;
    if((p = getenv(env_variable)) != NULL){
	/* all this when what we want is a cpystr */
	utf8_p = fname_to_utf8(p);
	len = strlen(utf8_p);
	env_cpy = (char *)fs_get((len+1)*sizeof(char));
	strncpy(env_cpy, utf8_p, len+1);
	env_cpy[len] = '\0';

	return(env_cpy);
    }
    else
      return(NULL);
#endif /* !_WINDOWS */
}
Exemplo n.º 2
0
/*
 * Given a mime-type, return the file extension if there is one
 *
 * Returns: 1 on success, 0 on failure
 */
int
mime_get_os_ext_from_mimetype(char *mime_type, char *file_ext, int file_ext_len)
{
#ifdef	_WINDOWS
    int ret;
    LPTSTR x, mime_type_lpt, file_ext_lpt;

    mime_type_lpt = utf8_to_lptstr(mime_type);

    if(mime_type_lpt){
	if(file_ext){
	    file_ext_lpt = (LPTSTR) fs_get(file_ext_len * sizeof(TCHAR));
	    file_ext_lpt[0] = '\0';
	}
	else
	  file_ext_lpt = NULL;
    }

    ret = mswin_reg_mime_ext(mime_type_lpt, file_ext_lpt, (size_t) file_ext_len);

    /* convert answer back to UTF-8 */
    if(ret && file_ext_lpt && file_ext){
	char *u;

	u = lptstr_to_utf8(file_ext_lpt);
	if(u){
	    strncpy(file_ext, u, file_ext_len);
	    file_ext[file_ext_len-1] = '\0';
	    fs_give((void **) &u);
	}
    }

    if(mime_type_lpt)
      fs_give((void **) &mime_type_lpt);

    if(file_ext_lpt)
      fs_give((void **) &file_ext_lpt);

    return ret;

#elif	OSX_TARGET

    if(!mime_os_specific_access())
      return(0);
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
    CFStringRef mime_ref = NULL, type_id_ref = NULL, ext_ref = NULL;

    if(!mime_type || !*mime_type)
      return 0;
    /* This for if we built on OS X >= 10.3 but run on < 10.3 */
    if(&UTTypeCreatePreferredIdentifierForTag == NULL)
      return 0;
    if((mime_ref = CFStringCreateWithCString(NULL, mime_type,
				    kCFStringEncodingASCII)) == NULL)
      return 0;
    if((type_id_ref 
	= UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
						mime_ref, NULL)) == NULL)
      return 0;

    if((ext_ref = UTTypeCopyPreferredTagWithClass(type_id_ref,
				   kUTTagClassFilenameExtension)) == NULL)
      return 0;
    if((CFStringGetCString(ext_ref, file_ext, (CFIndex)file_ext_len - 1,
			   kCFStringEncodingASCII)) == false)
      return 0;

    file_ext[file_ext_len - 1] = '\0';

    return 1;
#else
    return 0;
#endif /* AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER */

#else
    return 0;
#endif /* OSX_TARGET */
}
Exemplo n.º 3
0
/*
 * Prompt for username and password
 */
int
os_login_dialog (NETMBX *mb, char *user_utf8, int userlen,
		 char *pwd_utf8, int pwdlen, int pwc, int fixuser, int *prespass)
{
    DLGPROC	dlgprc;
    HINSTANCE	hInst;
    HWND	hWnd;
    DLG_LOGINDATA  dlgpw;
    LPTSTR user_lptstr, pwd_lptstr;
    char *tuser_utf8, *tpwd_utf8;

    mswin_killsplash();
    hInst = (HINSTANCE) mswin_gethinstance ();	
    hWnd = (HWND) mswin_gethwnd ();

    dlgpw.mb = mb;

    dlgpw.user = (LPTSTR)fs_get(userlen*sizeof(TCHAR));
    user_lptstr = utf8_to_lptstr(user_utf8);
    _tcsncpy(dlgpw.user, user_lptstr, userlen - 1);
    dlgpw.user[userlen - 1] = '\0';
    fs_give((void **) &user_lptstr);
    dlgpw.userlen = userlen;

    dlgpw.pwd = (LPTSTR)fs_get(pwdlen*sizeof(TCHAR));
    pwd_lptstr = utf8_to_lptstr(pwd_utf8);
    _tcsncpy(dlgpw.pwd, pwd_lptstr, pwdlen - 1);
    dlgpw.pwd[pwdlen - 1] = '\0';
    fs_give((void **) &pwd_lptstr);
    dlgpw.pwdlen = pwdlen;

    dlgpw.fixuser = fixuser;
    dlgpw.pwc = pwc;
    dlgpw.rv = 0;

    dlgprc = login_dialog_proc;

    DialogBoxParam (hInst, MAKEINTRESOURCE (ps_global->install_flag
					    ? IDD_LOGINDLG2 : IDD_LOGINDLG), 
		    NULL, dlgprc, (LPARAM)&dlgpw);

    if(dlgpw.rv == 0){
	tuser_utf8 = lptstr_to_utf8(dlgpw.user);
	if(tuser_utf8){
	    strncpy(user_utf8, tuser_utf8, userlen - 1);
	    user_utf8[userlen - 1] = '\0';
	    fs_give((void **) &tuser_utf8);
	}

	tpwd_utf8 = lptstr_to_utf8(dlgpw.pwd);
	if(tpwd_utf8){
	    strncpy(pwd_utf8, tpwd_utf8, pwdlen - 1);
	    pwd_utf8[pwdlen - 1] = '\0';
	    fs_give((void **) &tpwd_utf8);
	}
	if(prespass)
	  (*prespass) = dlgpw.prespass;
    }

    return(dlgpw.rv);
}
Exemplo n.º 4
0
/*
 * Dialog proc to handle login
 * 
 * Configures the dialog box on init and retrieves the settings on exit.
 */    
BOOL CALLBACK  __export 
config_dialog_proc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    DLG_CONFIGDATA *dlgcfg;
    BOOL ret = FALSE;
    int checked, def_rem_fldr = 1, def_diff_fldr = 0;

    switch (uMsg) {
    case WM_INITDIALOG:

  	dlgcfg = (DLG_CONFIGDATA *)lParam;
  	SetWindowLong (hDlg, WINDOW_USER_DATA, (LONG) dlgcfg);
	if(ps_global->install_flag)
	  SetDlgItemText(hDlg, IDC_CONFTEXT, TEXT("Please specify where Alpine should create (or look for) your personal configuration file."));
	SetDlgItemText(hDlg, IDC_CONFEFLDRNAME, TEXT("remote_pinerc"));
	if(*dlgcfg->confpath){
	    if(dlgcfg->confpath[0] == '{'){
		LPTSTR tfldr, p, tfldr2, p2, user;

		tfldr = utf8_to_lptstr((LPSTR)(dlgcfg->confpath+1));
		if(p = _tcschr(tfldr, '}')){
		    *p++ = '\0';
		    if(_tcscmp(TEXT("remote_pinerc"), p)){
			SetDlgItemText(hDlg, IDC_CONFEFLDRNAME, p);
			def_diff_fldr = 1;
		    }

		    tfldr2 = _tcsdup(tfldr);
		    for(p = tfldr, p2 = tfldr2; *p; p++)
		      if(*p == '/' && !_tcsnicmp(p, TEXT("/user="******"remote_pinerc"));
	  break;
	case IDC_CONFRRADIO:
	case IDC_CONFLRADIO:
	    CheckRadioButton (hDlg, IDC_CONFRRADIO, IDC_CONFLRADIO, wParam);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFFNTXT), wParam == IDC_CONFRRADIO ? 0 : 1);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFEFN), wParam == IDC_CONFRRADIO ? 0 : 1);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFBROWSE), wParam == IDC_CONFRRADIO ? 0 : 1);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFSRVRTXT), wParam == IDC_CONFRRADIO ? 1 : 0);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFESERVER), wParam == IDC_CONFRRADIO ? 1 : 0);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFUNTXT), wParam == IDC_CONFRRADIO ? 1 : 0);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFEUSERNAME), wParam == IDC_CONFRRADIO ? 1 : 0);
	    EnableWindow(GetDlgItem(hDlg, IDC_CONFDFLTFLDR), wParam == IDC_CONFRRADIO ? 1 : 0);
	    if(wParam == IDC_CONFRRADIO && IsDlgButtonChecked(hDlg, IDC_CONFDFLTFLDR) == BST_UNCHECKED){
		EnableWindow(GetDlgItem(hDlg, IDC_CONFFLDRTXT), 1);
		EnableWindow(GetDlgItem(hDlg, IDC_CONFEFLDRNAME), 1);
	    }
	    else if(wParam == IDC_CONFLRADIO){
		EnableWindow(GetDlgItem(hDlg, IDC_CONFFLDRTXT), 0);
		EnableWindow(GetDlgItem(hDlg, IDC_CONFEFLDRNAME), 0);
	    }
	    break;
	case IDC_CONFBROWSE:
	    if(1){
		TCHAR fn[MAXPATH+1];
		OPENFILENAME ofn;

		fn[0] = '\0';

		/* Set up the BIG STRUCTURE. see mswin.c */
  		memset (&ofn, 0, sizeof(ofn));
  		ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
  		ofn.hwndOwner = hDlg;
  		ofn.lpstrFilter = NULL;
  		ofn.lpstrCustomFilter = NULL;
  		ofn.nFilterIndex = 0;
  		ofn.lpstrFile = fn;
  		ofn.nMaxFile = MAXPATH;
  		ofn.lpstrFileTitle = NULL;
  		ofn.nMaxFileTitle = 0;
		ofn.lpstrInitialDir = NULL;
  		ofn.lpstrTitle = TEXT("Select File");
  		ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST;
  		ofn.lpstrDefExt = NULL;

  		if (GetOpenFileName (&ofn)) {
		    SetDlgItemText(hDlg, IDC_CONFEFN, fn);
		}
	    }
	    break;
	case IDOK:
	    /* Retrieve the new username/passwd. */
	    if(IsDlgButtonChecked(hDlg, IDC_CONFDFLTSET) == BST_CHECKED)
	      dlgcfg->setreg = 1;
	    else
	      dlgcfg->setreg = 0;
	    if(IsDlgButtonChecked(hDlg, IDC_CONFRRADIO) == BST_CHECKED){
		TCHAR lptstr_buf[MAXPATH+1];
		char *utf8_srvr, *utf8_username, *utf8_fldrname;

		GetDlgItemText(hDlg, IDC_CONFESERVER, lptstr_buf, MAXPATH);
		lptstr_buf[MAXPATH] = '\0';
		utf8_srvr = lptstr_to_utf8(lptstr_buf);
		removing_leading_and_trailing_white_space(utf8_srvr);
		if(!*utf8_srvr){
		    MessageBox(hDlg, TEXT("IMAP Server field empty"),
			       TEXT("Alpine"), MB_ICONWARNING | MB_OK);
		    if(utf8_srvr)
		      fs_give((void **) &utf8_srvr);

		    return(TRUE);
		}

		GetDlgItemText(hDlg, IDC_CONFEUSERNAME, lptstr_buf, MAXPATH);
		lptstr_buf[MAXPATH] = '\0';
		utf8_username = lptstr_to_utf8(lptstr_buf);
		removing_leading_and_trailing_white_space(utf8_username);
		if(IsDlgButtonChecked(hDlg, IDC_CONFDFLTFLDR) == BST_CHECKED){
		    utf8_fldrname = cpystr("remote_pinerc");
		}
		else{
		    GetDlgItemText(hDlg, IDC_CONFEFLDRNAME, lptstr_buf, MAXPATH);
		    lptstr_buf[MAXPATH] = '\0';
		    utf8_fldrname = lptstr_to_utf8(lptstr_buf);
		    removing_leading_and_trailing_white_space(utf8_fldrname);
		    if(!*utf8_fldrname){
			MessageBox(hDlg, TEXT("Configuration Folder Name field empty"),
				   TEXT("Alpine"), MB_ICONWARNING | MB_OK);
			if(utf8_srvr)
			  fs_give((void **) &utf8_srvr);

			if(utf8_username)
			  fs_give((void **) &utf8_username);

			if(utf8_fldrname)
			  fs_give((void **) &utf8_fldrname);

			return(TRUE);
		    }
		}
		if((strlen(utf8_srvr) 
		    + strlen(utf8_username)
		    + strlen(utf8_fldrname)
		    + 11) > dlgcfg->confpathlen){
		    MessageBox(hDlg, TEXT("Config path too long"),
			       TEXT("Alpine"), MB_ICONWARNING | MB_OK);
		    if(utf8_srvr)
		      fs_give((void **) &utf8_srvr);

		    if(utf8_username)
		      fs_give((void **) &utf8_username);

		    if(utf8_fldrname)
		      fs_give((void **) &utf8_fldrname);

		    return(TRUE);
		}

		snprintf(dlgcfg->confpath, dlgcfg->confpathlen, "{%s%s%s}%s", utf8_srvr,
			 *utf8_username ? "/user="******"",
			utf8_username, utf8_fldrname);
		if(utf8_srvr)
		  fs_give((void **) &utf8_srvr);

		if(utf8_username)
		  fs_give((void **) &utf8_username);

		if(utf8_fldrname)
		  fs_give((void **) &utf8_fldrname);
	    }
	    else{
		TCHAR lptstr_fn[MAXPATH+1];
		char *utf8_fn;

		GetDlgItemText(hDlg, IDC_CONFEFN, lptstr_fn, MAXPATH);
		lptstr_fn[MAXPATH] = '\0';
		utf8_fn = lptstr_to_utf8(lptstr_fn);
		removing_leading_and_trailing_white_space(utf8_fn);
		if(!*utf8_fn){
		    MessageBox(hDlg, TEXT("Configuration File Name field empty"),
			       TEXT("Alpine"), MB_ICONWARNING | MB_OK);
		    if(utf8_fn)
		      fs_give((void **) &utf8_fn);

		    return(TRUE);
		}

		if(strlen(utf8_fn) >= dlgcfg->confpathlen){
		    MessageBox(hDlg, TEXT("Config path too long"),
			       TEXT("Alpine"), MB_ICONWARNING | MB_OK);
		    if(utf8_fn)
		      fs_give((void **) &utf8_fn);

		    return(TRUE);
		}

		strncpy(dlgcfg->confpath, utf8_fn, dlgcfg->confpathlen);
		dlgcfg->confpath[dlgcfg->confpathlen-1] = '\0';
		if(utf8_fn)
		  fs_give((void **) &utf8_fn);
	    }

	    EndDialog (hDlg, LOWORD(wParam));
	    dlgcfg->rv = 0;
	    ret = TRUE;
	    break;

	case IDCANCEL:
	    dlgcfg->rv = 1;
	    ret = TRUE;
	    EndDialog (hDlg, LOWORD(wParam));
	    break;
        }
	break;
	

    }
    return (ret);
}
Exemplo n.º 5
0
/*
 * Dialog proc to handle login
 * 
 * Configures the dialog box on init and retrieves the settings on exit.
 */    
BOOL CALLBACK  __export 
config_vars_dialog_proc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    DLG_CONFIGVARSDATA *dlgcv;
    BOOL ret = FALSE;
    int usepop = 0;
    char buf[2*MAXPATH+1], *p;
    int buflen = 2*MAXPATH;
#define TCBUFLEN (2*MAXPATH)
    TCHAR tcbuf[TCBUFLEN+1];
    LPTSTR tmp_lptstr;
    char *u;

    switch (uMsg) {
      case WM_INITDIALOG:
  	dlgcv = (DLG_CONFIGVARSDATA *)lParam;
  	SetWindowLong (hDlg, WINDOW_USER_DATA, (LONG) dlgcv);
	if(dlgcv->ivars->pname){
	    tmp_lptstr = utf8_to_lptstr(dlgcv->ivars->pname);
	    if(tmp_lptstr){
		SetDlgItemText(hDlg, IDC_CFV_PNAME, tmp_lptstr);
		fs_give((void **) &tmp_lptstr);
	    }
	}

	if(dlgcv->ivars->userid && dlgcv->ivars->domain){
	    snprintf(buf, sizeof(buf), "%.*s@%.*s", MAXPATH, dlgcv->ivars->userid,
		    MAXPATH, dlgcv->ivars->domain);
	    buf[buflen-1] = '\0';
	    tmp_lptstr = utf8_to_lptstr(buf);
	    if(tmp_lptstr){
		SetDlgItemText(hDlg, IDC_CFV_EMAILADR, tmp_lptstr);
		fs_give((void **) &tmp_lptstr);
	    }
	}

	if(dlgcv->ivars->inboxpath){
	    char *mbx;

	    mbx = dlgcv->ivars->inboxpath;
	    if(*mbx == '{' && (p = strindex(mbx, '}'))
	       && ((*(p+1) == '\0') || !strucmp(p+1, "inbox"))){
		char srvbuf[MAXPATH+1], tuser[MAXPATH+1];
		int i, j, k;

		srvbuf[0] = '\0';
		tuser[0] = '\0';
		strncpy(buf, mbx+1, min(buflen, (int)(p - (mbx+1))));
		buf[min(buflen-1, (int)(p - (mbx+1)))] = '\0';
		for(i = 0, j = 0; buf[i] && j < MAXPATH; i++){
		    if(buf[i] == '/'){
			if(!struncmp("/user="******"/pop3", buf+i, 5)
				&& (!*(buf+5) || (*(buf+5) == '/'))){
			    usepop = 1;
			    i += 4;
			}
			else
			  srvbuf[j++] = buf[i];
		    }
		    else
		      srvbuf[j++] = buf[i];
		}
		srvbuf[j] = '\0';
		if(*srvbuf){
		    tmp_lptstr = utf8_to_lptstr(srvbuf);
		    if(tmp_lptstr){
			SetDlgItemText(hDlg, IDC_CFV_MSERVER, tmp_lptstr);
			fs_give((void **) &tmp_lptstr);
		    }
		}

		if(*tuser){
		    tmp_lptstr = utf8_to_lptstr(tuser);
		    if(tmp_lptstr){
			SetDlgItemText(hDlg, IDC_CFV_LOGIN, tmp_lptstr);
			fs_give((void **) &tmp_lptstr);
		    }
		}
	    }
	    else {
		tmp_lptstr = utf8_to_lptstr(mbx);
		if(tmp_lptstr){
		    SetDlgItemText(hDlg, IDC_CFV_MSERVER, tmp_lptstr);
		    fs_give((void **) &tmp_lptstr);
		}

		if(*mbx != '{' && *mbx != '#')
		  EnableWindow(GetDlgItem(hDlg, IDC_CFV_MSERVER), 0);
	    }
	}
	CheckRadioButton (hDlg, IDC_CFV_IMAP, IDC_CFV_POP3,
			  usepop ? IDC_CFV_POP3 : IDC_CFV_IMAP);
	if(dlgcv->ivars->smtpserver){
	    tmp_lptstr = utf8_to_lptstr(dlgcv->ivars->smtpserver);
	    if(tmp_lptstr){
		SetDlgItemText(hDlg, IDC_CFV_SMTPSERVER, tmp_lptstr);
		fs_give((void **) &tmp_lptstr);
	    }
	}

	if(dlgcv->ivars->defmailclient)
	  CheckDlgButton(hDlg, IDC_CFV_DEFMAILER, BST_CHECKED);
	if(dlgcv->ivars->defnewsclient)
	  CheckDlgButton(hDlg, IDC_CFV_DEFNEWSRDR, BST_CHECKED);
	
 	return (1);
	break;

      case WM_COMMAND:
	dlgcv = (DLG_CONFIGVARSDATA *) GetWindowLong (hDlg, WINDOW_USER_DATA);
	switch (wParam) {
	  case IDOK:
	    /* personal name */
	    GetDlgItemText(hDlg, IDC_CFV_PNAME, tcbuf, TCBUFLEN);
	    tcbuf[TCBUFLEN] = '\0';
	    u = lptstr_to_utf8(tcbuf);
	    if(u){
		removing_leading_and_trailing_white_space(u);
		if(dlgcv->ivars->pname)
		  fs_give((void **)&dlgcv->ivars->pname);

		if(*u){
		    dlgcv->ivars->pname = u;
		    u = NULL;
		}

		if(u)
		  fs_give((void **) &u);
	    }
	    
	    /* user-id and domain */
	    GetDlgItemText(hDlg, IDC_CFV_EMAILADR, tcbuf, TCBUFLEN);
	    tcbuf[TCBUFLEN] = '\0';
	    u = lptstr_to_utf8(tcbuf);
	    if(u){
		removing_leading_and_trailing_white_space(u);
		if(p = strindex(u, '@')){
		    *(p++) = '\0';
		    if(dlgcv->ivars->userid)
		      fs_give((void **)&dlgcv->ivars->userid);

		    if(dlgcv->ivars->domain)
		      fs_give((void **)&dlgcv->ivars->domain);

		    if(*u){
			dlgcv->ivars->userid = u;
			u = NULL;
		    }

		    if(*p)
		      dlgcv->ivars->domain = cpystr(p);
		}
		else{
		    MessageBox(hDlg, TEXT("Invalid email address.  Should be username@domain"),
			       TEXT("Alpine"), MB_ICONWARNING | MB_OK);
		    return(TRUE);
		}

		if(u)
		  fs_give((void **) &u);
	    }

	    /* inbox-path */
	    GetDlgItemText(hDlg, IDC_CFV_MSERVER, tcbuf, TCBUFLEN);
	    tcbuf[TCBUFLEN] = '\0';
	    u = lptstr_to_utf8(tcbuf);
	    if(u){
		removing_leading_and_trailing_white_space(u);
		if(*u == '{' || *u == '#'
		   || !IsWindowEnabled(GetDlgItem(hDlg, IDC_CFV_MSERVER))){
		    if(dlgcv->ivars->inboxpath)
		      fs_give((void **)&dlgcv->ivars->inboxpath);

		    dlgcv->ivars->inboxpath = u;
		    u = NULL;
		}
		else if(*u){
		    char tsrvr[4*MAXPATH+1];
		    int tsrvrlen = 4*MAXPATH;

		    if(dlgcv->ivars->inboxpath)
		      fs_give((void **)&dlgcv->ivars->inboxpath);

		    snprintf(tsrvr, sizeof(tsrvr), "{%s%s", u,
			    IsDlgButtonChecked(hDlg, IDC_CFV_POP3) 
			    == BST_CHECKED ? "/pop3" : "");

		    if(u)
		      fs_give((void **) &u);

		    GetDlgItemText(hDlg, IDC_CFV_LOGIN, tcbuf, TCBUFLEN);
		    tcbuf[TCBUFLEN] = '\0';
		    u = lptstr_to_utf8(tcbuf);
		    if(u){
			removing_leading_and_trailing_white_space(u);
			if(*u){
			    strncat(tsrvr, "/user="******"}inbox", sizeof(tsrvr)-strlen(tsrvr)-1);
			tsrvr[sizeof(tsrvr)-1] = '\0';
			dlgcv->ivars->inboxpath = cpystr(tsrvr);
		    }
		}

		if(u)
		  fs_give((void **) &u);
	    }

	    /* smtp-server */
	    GetDlgItemText(hDlg, IDC_CFV_SMTPSERVER, tcbuf, TCBUFLEN);
	    tcbuf[TCBUFLEN] = '\0';
	    u = lptstr_to_utf8(tcbuf);
	    if(u){
		removing_leading_and_trailing_white_space(u);
		if(dlgcv->ivars->smtpserver)
		  fs_give((void **)&dlgcv->ivars->smtpserver);

		if(*u){
		    dlgcv->ivars->smtpserver = u;
		    u = NULL;
		}

		if(u)
		  fs_give((void **) &u);
	    }

	    dlgcv->ivars->defmailclient =
	      (IsDlgButtonChecked(hDlg, IDC_CFV_DEFMAILER)
	       == BST_CHECKED);
	    dlgcv->ivars->defnewsclient =
	      (IsDlgButtonChecked(hDlg, IDC_CFV_DEFNEWSRDR)
	       == BST_CHECKED);

	    EndDialog (hDlg, LOWORD(wParam));
	    dlgcv->rv = 0;
	    ret = TRUE;
	    break;

	case IDCANCEL:
	    dlgcv->rv = 1;
	    ret = TRUE;
	    EndDialog (hDlg, LOWORD(wParam));
	    break;
        }
	break;
	

    }
    return (ret);
}
Exemplo n.º 6
0
/*----------------------------------------------------------------------
      Fill in homedir, login, and fullname for the logged in user.
      These are all pointers to static storage so need to be copied
      in the caller.

 Args: ui    -- struct pointer to pass back answers

 Result: fills in the fields
  ----*/
void
get_user_info(struct user_info *ui)
{
#ifndef	_WINDOWS
    struct passwd *unix_pwd;

    unix_pwd = getpwuid(getuid());
    if(unix_pwd == NULL) {
      ui->homedir = (char *) malloc(sizeof(char));
      ui->homedir[0] = '\0';
      ui->login = (char *) malloc(sizeof(char));
      ui->login[0] = '\0';
      ui->fullname = (char *) malloc(sizeof(char));
      ui->fullname[0] = '\0';
    }else {
	char *s; 
	size_t len;

	len = strlen(fname_to_utf8(unix_pwd->pw_dir));
	ui->homedir = (char *) malloc((len+1) * sizeof(char));
	snprintf(ui->homedir, len+1, "%s", fname_to_utf8(unix_pwd->pw_dir));

	len = strlen(fname_to_utf8(unix_pwd->pw_name));
	ui->login = (char *) malloc((len+1) * sizeof(char));
	snprintf(ui->login, len+1, "%s", fname_to_utf8(unix_pwd->pw_name));

	if((s = gcos_name(unix_pwd->pw_gecos, unix_pwd->pw_name)) != NULL){
	    len = strlen(fname_to_utf8(s));
	    ui->fullname = (char *) malloc((len+1) * sizeof(char));
	    snprintf(ui->fullname, len+1, "%s", fname_to_utf8(s));
	}
    }

#else  /* _WINDOWS */
    char buf[_MAX_PATH], *p, *q;
    TCHAR lptstr_buf[_MAX_PATH];
    int	 len = _MAX_PATH;

    if(GetUserName(lptstr_buf, &len))
      ui->login = lptstr_to_utf8(lptstr_buf);
    else
      ui->login = our_getenv("USERNAME");

    if((p = our_getenv("HOMEDRIVE"))
       && (q = our_getenv("HOMEPATH")))
      snprintf(buf, sizeof(buf), "%s%s", p, q);
    else
      snprintf(buf, sizeof(buf), "%c:\\", '@' + _getdrive());

    if(p)
      free((void *)p);

    if(q)
      free((void *)q);

    ui->homedir = (char *) malloc((strlen(buf)+1) * sizeof(char));
    if(ui->homedir){
	strncpy(ui->homedir, buf, strlen(buf));
	ui->homedir[strlen(buf)] = '\0';
    }

    ui->fullname = (char *) malloc(sizeof(char));
    if(ui->fullname)
      ui->fullname[0] = '\0';
#endif /* _WINDOWS */
}