1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/*
* env.c -- small service routines
*
* For license terms, see the file COPYING in this directory.
*/
#include "config.h"
#include "fetchmail.h"
#include <stdio.h>
#if defined(STDC_HEADERS)
#include <stdlib.h>
#endif
#if defined(HAVE_UNISTD_H)
#include <unistd.h>
#endif
#include <pwd.h>
#include <string.h>
char *user, *home, *fetchmailhost;
extern char *program_name;
void envquery(int argc, char **argv)
/* set up basic stuff from the environment (including the rc file name) */
{
char *tmpdir, tmpbuf[BUFSIZ];
struct passwd *pw;
struct query *ctl;
if ((program_name = strrchr(argv[0], '/')) != NULL)
++program_name;
else
program_name = argv[0];
if ((user = getenv("USER")) == (char *)NULL)
user = getenv("LOGNAME");
if ((user == (char *)NULL) || (home = getenv("HOME")) == (char *)NULL)
{
if ((pw = getpwuid(getuid())) != NULL)
{
user = pw->pw_name;
home = pw->pw_dir;
}
else
{
fprintf(stderr,
"%s: can't find your name and home directory!\n",
program_name);
exit(PS_UNDEFINED);
}
}
/* we'll need this for the SMTP forwarding target and error messages */
if (gethostname(tmpbuf, sizeof(tmpbuf)))
{
fprintf(stderr, "%s: can't determine your host!", program_name);
exit(PS_IOERR);
}
fetchmailhost = xstrdup(tmpbuf);
#define RCFILE_NAME ".fetchmailrc"
rcfile = (char *) xmalloc(strlen(home)+strlen(RCFILE_NAME)+2);
strcpy(rcfile, home);
strcat(rcfile, "/");
strcat(rcfile, RCFILE_NAME);
}
char *showproto(int proto)
/* protocol index to protocol name mapping */
{
switch (proto)
{
case P_AUTO: return("auto"); break;
#ifdef POP2_ENABLE
case P_POP2: return("POP2"); break;
#endif /* POP2_ENABLE */
case P_POP3: return("POP3"); break;
case P_IMAP: return("IMAP"); break;
case P_IMAP_K4: return("IMAP-K4"); break;
case P_APOP: return("APOP"); break;
case P_RPOP: return("RPOP"); break;
case P_ETRN: return("ETRN"); break;
default: return("unknown?!?"); break;
}
}
char *visbuf(const char *buf)
/* visibilize a given string */
{
static char vbuf[BUFSIZ];
char *tp = vbuf;
while (*buf)
{
if (isprint(*buf) || *buf == ' ')
*tp++ = *buf++;
else if (*buf == '\n')
{
*tp++ = '\\'; *tp++ = 'n';
buf++;
}
else if (*buf == '\r')
{
*tp++ = '\\'; *tp++ = 'r';
buf++;
}
else if (*buf == '\b')
{
*tp++ = '\\'; *tp++ = 'b';
buf++;
}
else if (*buf < ' ')
{
*tp++ = '\\'; *tp++ = '^'; *tp++ = '@' + *buf;
buf++;
}
else
{
(void) sprintf(tp, "\\0x%02x", *buf++);
tp += strlen(tp);
}
}
*tp++ = '\0';
return(vbuf);
}
/* env.c ends here */
|