88 |
|
|
89 |
|
|
90 |
int |
int |
91 |
translate_parser(int method, int key, char *arg, void *inv_data, |
translate_parser(int method, int key, struct list *arglist, void *inv_data, |
92 |
void *func_data, MESSAGE *msg) |
void *func_data, MESSAGE *msg) |
93 |
{ |
{ |
94 |
struct translate_env *env = inv_data; |
struct translate_env *env = func_data; |
95 |
char *p = 0; |
char *p = 0; |
96 |
char *ptr1 = 0; |
int cu = 0; /* check a user name */ |
97 |
char *ptr2 = 0; |
char a1[65]; |
|
char a1[65]; |
|
98 |
char a2[65]; |
char a2[65]; |
99 |
char user[65]; |
char user[65]; |
100 |
char address[65]; |
char address[65]; |
|
int cu = 0; /* check a user name */ |
|
101 |
unsigned long inaddr; |
unsigned long inaddr; |
102 |
struct sockaddr_in addr; |
struct sockaddr_in addr; |
103 |
|
size_t argc; |
104 |
|
|
105 |
if (!env || env->stop) |
if (!env || env->stop) |
106 |
return RC_KW_HANDLED; |
return RC_KW_HANDLED; |
107 |
|
|
108 |
switch (key) { |
switch (key) { |
109 |
case KW_TRANSLATE: |
case KW_TRANSLATE: |
110 |
|
/* translate [=] [USER@]ADDRESS into [=] USERNAME |
111 |
|
argv[0] = [USER@]ADDRESS |
112 |
|
argv[1] = "into" |
113 |
|
argv[2] = USERNAME */ |
114 |
|
|
115 |
safe_strcpy(a1, env->extaddr); |
safe_strcpy(a1, env->extaddr); |
116 |
memset(&addr, 0, sizeof(addr)); |
memset(&addr, 0, sizeof(addr)); |
|
|
|
|
for (ptr1 = arg; *ptr1 && isspace(*ptr1); ptr1++) |
|
|
; |
|
|
if (!*ptr1) { |
|
|
info(VERBOSE, _("Translation map: incorrect syntax.")); |
|
|
break; |
|
|
} |
|
117 |
|
|
118 |
for (ptr2 = ptr1; *ptr2 && !isspace(*ptr2); ptr2++) |
argc = list_count(arglist); |
119 |
; |
if (argc < 3 || argc > 4 |
120 |
if (!*ptr2) { |
|| strcmp(list_item(arglist, 1), "into")) { |
121 |
info(VERBOSE, _("Translation map: incorrect syntax.")); |
info(VERBOSE, _("Translation map: incorrect syntax.")); |
122 |
break; |
break; |
123 |
} |
} |
124 |
|
|
125 |
*ptr2++ = 0; |
safe_strcpy(env->translate, list_item(arglist, 0)); |
126 |
for (; *ptr2 && isspace(*ptr2); ptr2++) |
p = list_item(arglist, 2); |
127 |
; |
if (p[0] == '=') |
128 |
if (!*ptr2 || strncmp(ptr2, "into", 4)) { |
p = list_item(arglist, 3); |
129 |
info(VERBOSE, _("Translation map: incorrect syntax.")); |
safe_strcpy(env->into, p); |
|
break; |
|
|
} |
|
|
|
|
|
for (ptr2 += 4; *ptr2 && isspace(*ptr2); ptr2++) |
|
|
; |
|
|
|
|
|
if (*ptr2 != '=') { |
|
|
info(VERBOSE, _("Translation map: incorrect syntax.")); |
|
|
break; |
|
|
} |
|
|
|
|
|
for (ptr2++; *ptr2 && isspace(*ptr2); ptr2++) |
|
|
; |
|
|
|
|
|
safe_strcpy(env->translate, ptr1); |
|
|
safe_strcpy(env->into, ptr2); |
|
130 |
|
|
131 |
if (strchr(env->translate, '@')) { |
if (strchr(env->translate, '@')) { |
132 |
if (env->extuser == 0) |
if (env->extuser == 0) |