summaryrefslogtreecommitdiffabout
path: root/libetpan/src/low-level
authorzautrix <zautrix>2005-03-18 22:05:02 (UTC)
committer zautrix <zautrix>2005-03-18 22:05:02 (UTC)
commit297208a61298fceab6d96bbd1c46198b1c0f7a76 (patch) (unidiff)
tree50f0c6f775393c1eec15b71691a798d1dacab86d /libetpan/src/low-level
parentf0232b7801f098b5842e3cd5a1fd804af98ab862 (diff)
downloadkdepimpi-297208a61298fceab6d96bbd1c46198b1c0f7a76.zip
kdepimpi-297208a61298fceab6d96bbd1c46198b1c0f7a76.tar.gz
kdepimpi-297208a61298fceab6d96bbd1c46198b1c0f7a76.tar.bz2
fixes applied
Diffstat (limited to 'libetpan/src/low-level') (more/less context) (ignore whitespace changes)
-rw-r--r--libetpan/src/low-level/imap/mailimap_parser.c22
-rw-r--r--libetpan/src/low-level/maildir/maildir.c17
-rw-r--r--libetpan/src/low-level/mh/mailmh.c3
-rw-r--r--libetpan/src/low-level/pop3/mailpop3.c7
4 files changed, 43 insertions, 6 deletions
diff --git a/libetpan/src/low-level/imap/mailimap_parser.c b/libetpan/src/low-level/imap/mailimap_parser.c
index ab4db67..071891c 100644
--- a/libetpan/src/low-level/imap/mailimap_parser.c
+++ b/libetpan/src/low-level/imap/mailimap_parser.c
@@ -2354,98 +2354,116 @@ mailimap_body_fld_known_enc_parse(mailstream * fd, MMAPString * buffer,
2354 2354
2355 if (type == -1) { 2355 if (type == -1) {
2356 res = MAILIMAP_ERROR_PARSE; 2356 res = MAILIMAP_ERROR_PARSE;
2357 goto err; 2357 goto err;
2358 } 2358 }
2359 2359
2360 r = mailimap_dquote_parse(fd, buffer, &cur_token); 2360 r = mailimap_dquote_parse(fd, buffer, &cur_token);
2361 if (r != MAILIMAP_NO_ERROR) { 2361 if (r != MAILIMAP_NO_ERROR) {
2362 res = r; 2362 res = r;
2363 goto err; 2363 goto err;
2364 } 2364 }
2365 2365
2366 * result = type; 2366 * result = type;
2367 * index = cur_token; 2367 * index = cur_token;
2368 2368
2369 return MAILIMAP_NO_ERROR; 2369 return MAILIMAP_NO_ERROR;
2370 2370
2371 err: 2371 err:
2372 return res; 2372 return res;
2373} 2373}
2374 2374
2375static int 2375static int
2376mailimap_body_fld_enc_parse(mailstream * fd, MMAPString * buffer, 2376mailimap_body_fld_enc_parse(mailstream * fd, MMAPString * buffer,
2377 size_t * index, 2377 size_t * index,
2378 struct mailimap_body_fld_enc ** result, 2378 struct mailimap_body_fld_enc ** result,
2379 size_t progr_rate, 2379 size_t progr_rate,
2380 progress_function * progr_fun) 2380 progress_function * progr_fun)
2381{ 2381{
2382 size_t cur_token; 2382 size_t cur_token;
2383 int type; 2383 int type;
2384 char * value; 2384 char * value;
2385 struct mailimap_body_fld_enc * body_fld_enc; 2385 struct mailimap_body_fld_enc * body_fld_enc;
2386 int r; 2386 int r;
2387 int res; 2387 int res;
2388 2388
2389 cur_token = * index; 2389 cur_token = * index;
2390 2390
2391 r = mailimap_body_fld_known_enc_parse(fd, buffer, &cur_token, 2391 r = mailimap_body_fld_known_enc_parse(fd, buffer, &cur_token,
2392 &type, progr_rate, progr_fun); 2392 &type, progr_rate, progr_fun);
2393 if (r == MAILIMAP_NO_ERROR) { 2393 if (r == MAILIMAP_NO_ERROR) {
2394 value = NULL; 2394 value = NULL;
2395 } 2395 }
2396 else if (r == MAILIMAP_ERROR_PARSE) { 2396 else if (r == MAILIMAP_ERROR_PARSE) {
2397 type = MAILIMAP_BODY_FLD_ENC_OTHER; 2397 type = MAILIMAP_BODY_FLD_ENC_OTHER;
2398 2398
2399 r = mailimap_string_parse(fd, buffer, &cur_token, &value, NULL, 2399 r = mailimap_string_parse(fd, buffer, &cur_token, &value, NULL,
2400 progr_rate, progr_fun); 2400 progr_rate, progr_fun);
2401 if (r != MAILIMAP_NO_ERROR) { 2401 if (r != MAILIMAP_NO_ERROR) {
2402 res = r; 2402 // LR start
2403 goto err; 2403 // accept NIL and set type to utf8
2404 int ret = r;
2405 r = mailimap_char_parse(fd, buffer, &cur_token, 'N');
2406 if (r == MAILIMAP_NO_ERROR) {
2407 r = mailimap_char_parse(fd, buffer, &cur_token, 'I');
2408 if (r == MAILIMAP_NO_ERROR) {
2409 r = mailimap_char_parse(fd, buffer, &cur_token, 'L');
2410 if (r == MAILIMAP_NO_ERROR) {
2411 type = 4;
2412 ret = MAILIMAP_NO_ERROR;
2413 value = NULL;
2414 }
2415 }
2416 }
2417 if ( ret != MAILIMAP_NO_ERROR ) {
2418 res = ret;
2419 goto err;
2420 }
2421 // LR end
2404 } 2422 }
2405 } 2423 }
2406 else { 2424 else {
2407 res = r; 2425 res = r;
2408 goto err; 2426 goto err;
2409 } 2427 }
2410 2428
2411 body_fld_enc = mailimap_body_fld_enc_new(type, value); 2429 body_fld_enc = mailimap_body_fld_enc_new(type, value);
2412 if (body_fld_enc == NULL) { 2430 if (body_fld_enc == NULL) {
2413 res = MAILIMAP_ERROR_MEMORY; 2431 res = MAILIMAP_ERROR_MEMORY;
2414 goto value_free; 2432 goto value_free;
2415 } 2433 }
2416 2434
2417 * result = body_fld_enc; 2435 * result = body_fld_enc;
2418 * index = cur_token; 2436 * index = cur_token;
2419 2437
2420 return MAILIMAP_NO_ERROR; 2438 return MAILIMAP_NO_ERROR;
2421 2439
2422 value_free: 2440 value_free:
2423 if (value) 2441 if (value)
2424 mailimap_string_free(value); 2442 mailimap_string_free(value);
2425 err: 2443 err:
2426 return res; 2444 return res;
2427} 2445}
2428 2446
2429/* 2447/*
2430 body-fld-id = nstring 2448 body-fld-id = nstring
2431*/ 2449*/
2432 2450
2433static int mailimap_body_fld_id_parse(mailstream * fd, MMAPString * buffer, 2451static int mailimap_body_fld_id_parse(mailstream * fd, MMAPString * buffer,
2434 size_t * index, char ** result, 2452 size_t * index, char ** result,
2435 size_t progr_rate, 2453 size_t progr_rate,
2436 progress_function * progr_fun) 2454 progress_function * progr_fun)
2437{ 2455{
2438 return mailimap_nstring_parse(fd, buffer, index, result, NULL, 2456 return mailimap_nstring_parse(fd, buffer, index, result, NULL,
2439 progr_rate, progr_fun); 2457 progr_rate, progr_fun);
2440} 2458}
2441 2459
2442 2460
2443/* 2461/*
2444 body-fld-lang = nstring / "(" string *(SP string) ")" 2462 body-fld-lang = nstring / "(" string *(SP string) ")"
2445*/ 2463*/
2446 2464
2447/* 2465/*
2448"(" string *(SP string) ")" 2466"(" string *(SP string) ")"
2449*/ 2467*/
2450 2468
2451static int 2469static int
diff --git a/libetpan/src/low-level/maildir/maildir.c b/libetpan/src/low-level/maildir/maildir.c
index 98b9f87..e81625d 100644
--- a/libetpan/src/low-level/maildir/maildir.c
+++ b/libetpan/src/low-level/maildir/maildir.c
@@ -65,134 +65,147 @@ struct maildir * maildir_new(const char * path)
65 65
66 md->mdir_counter = 0; 66 md->mdir_counter = 0;
67 md->mdir_mtime_new = (time_t) -1; 67 md->mdir_mtime_new = (time_t) -1;
68 md->mdir_mtime_cur = (time_t) -1; 68 md->mdir_mtime_cur = (time_t) -1;
69 69
70 md->mdir_pid = getpid(); 70 md->mdir_pid = getpid();
71 gethostname(md->mdir_hostname, sizeof(md->mdir_hostname)); 71 gethostname(md->mdir_hostname, sizeof(md->mdir_hostname));
72 strncpy(md->mdir_path, path, sizeof(md->mdir_path)); 72 strncpy(md->mdir_path, path, sizeof(md->mdir_path));
73 md->mdir_path[PATH_MAX - 1] = '\0'; 73 md->mdir_path[PATH_MAX - 1] = '\0';
74 74
75 md->mdir_msg_list = carray_new(128); 75 md->mdir_msg_list = carray_new(128);
76 if (md->mdir_msg_list == NULL) 76 if (md->mdir_msg_list == NULL)
77 goto free; 77 goto free;
78 78
79 md->mdir_msg_hash = chash_new(CHASH_DEFAULTSIZE, CHASH_COPYNONE); 79 md->mdir_msg_hash = chash_new(CHASH_DEFAULTSIZE, CHASH_COPYNONE);
80 if (md->mdir_msg_hash == NULL) 80 if (md->mdir_msg_hash == NULL)
81 goto free_msg_list; 81 goto free_msg_list;
82 82
83 return md; 83 return md;
84 84
85 free_msg_list: 85 free_msg_list:
86 carray_free(md->mdir_msg_list); 86 carray_free(md->mdir_msg_list);
87 free: 87 free:
88 free(md); 88 free(md);
89 err: 89 err:
90 return NULL; 90 return NULL;
91} 91}
92 92
93static void maildir_flush(struct maildir * md, int msg_new); 93static void maildir_flush(struct maildir * md, int msg_new);
94 94
95void maildir_free(struct maildir * md) 95void maildir_free(struct maildir * md)
96{ 96{
97 maildir_flush(md, 0); 97 maildir_flush(md, 0);
98 maildir_flush(md, 1); 98 maildir_flush(md, 1);
99 chash_free(md->mdir_msg_hash); 99 chash_free(md->mdir_msg_hash);
100 carray_free(md->mdir_msg_list); 100 carray_free(md->mdir_msg_list);
101 free(md); 101 free(md);
102} 102}
103 103
104#define MAX_TRY_ALLOC 32 104#define MAX_TRY_ALLOC 32
105 105
106static char * maildir_get_new_message_filename(struct maildir * md, 106static char * maildir_get_new_message_filename(struct maildir * md,
107 char * tmpfile) 107 char * tmpfile)
108{ 108{
109 char filename[PATH_MAX]; 109 char filename[PATH_MAX];
110 char basename[PATH_MAX]; 110 char basename[PATH_MAX];
111 int k; 111 int k;
112 time_t now; 112 time_t now;
113 //LR
114 struct stat f_stat;
113 int got_file; 115 int got_file;
114 int r; 116 int r;
115 117
116 got_file = 0; 118 got_file = 0;
117 now = time(NULL); 119 now = time(NULL);
118 k = 0; 120 k = 0;
119 while (k < MAX_TRY_ALLOC) { 121 while (k < MAX_TRY_ALLOC) {
120 snprintf(basename, sizeof(basename), "%lu.%u_%u.%s", 122 snprintf(basename, sizeof(basename), "%lu.%u_%u.%s",
121 (unsigned long) now, md->mdir_pid, md->mdir_counter, md->mdir_hostname); 123 (unsigned long) now, md->mdir_pid, md->mdir_counter, md->mdir_hostname);
122 snprintf(filename, sizeof(filename), "%s/tmp/%s", 124 snprintf(filename, sizeof(filename), "%s/tmp/%s",
123 md->mdir_path, basename); 125 md->mdir_path, basename);
124 126
127 // LR changed following lines
128 if ( stat( filename, &f_stat ) == -1 ) {
129 char * dup_filename;
130
131 dup_filename = strdup(filename);
132 if (dup_filename == NULL) {
133 //unlink(filename);
134 return NULL;
135 }
136 rename (tmpfile,dup_filename );
137#if 0
125 if (link(tmpfile, filename) == 0) { 138 if (link(tmpfile, filename) == 0) {
126 got_file = 1; 139 got_file = 1;
127 unlink(tmpfile); 140 unlink(tmpfile);
128 } 141 }
129 else if (errno == EXDEV) { 142 else if (errno == EXDEV) {
130 unlink(tmpfile); 143 unlink(tmpfile);
131 return NULL; 144 return NULL;
132 } 145 }
133 else if (errno == EPERM) { 146 else if (errno == EPERM) {
134 r = rename(tmpfile, filename); 147 r = rename(tmpfile, filename);
135 if (r < 0) { 148 if (r < 0) {
136 unlink(tmpfile); 149 unlink(tmpfile);
137 return NULL; 150 return NULL;
138 } 151 }
139 got_file = 1; 152 got_file = 1;
140 } 153 }
141 154
142 if (got_file) { 155 if (got_file) {
143 char * dup_filename; 156 char * dup_filename;
144 157
145 dup_filename = strdup(filename); 158 dup_filename = strdup(filename);
146 if (dup_filename == NULL) { 159 if (dup_filename == NULL) {
147 unlink(filename); 160 unlink(filename);
148 return NULL; 161 return NULL;
149 } 162 }
150 163#endif
151 md->mdir_counter ++; 164 md->mdir_counter ++;
152 165
153 return dup_filename; 166 return dup_filename;
154 } 167 }
155 168
156 md->mdir_counter ++; 169 md->mdir_counter ++;
157 k ++; 170 k ++;
158 } 171 }
159 172
160 return NULL; 173 return NULL;
161} 174}
162 175
163 176
164static void msg_free(struct maildir_msg * msg) 177static void msg_free(struct maildir_msg * msg)
165{ 178{
166 free(msg->msg_uid); 179 free(msg->msg_uid);
167 free(msg->msg_filename); 180 free(msg->msg_filename);
168 free(msg); 181 free(msg);
169} 182}
170 183
171/* 184/*
172 msg_new() 185 msg_new()
173 186
174 filename is given without path 187 filename is given without path
175*/ 188*/
176 189
177static struct maildir_msg * msg_new(char * filename, int new_msg) 190static struct maildir_msg * msg_new(char * filename, int new_msg)
178{ 191{
179 struct maildir_msg * msg; 192 struct maildir_msg * msg;
180 char * p; 193 char * p;
181 int flags; 194 int flags;
182 size_t uid_len; 195 size_t uid_len;
183 char * begin_uid; 196 char * begin_uid;
184 197
185 /* name of file : xxx-xxx_xxx-xxx:2,SRFT */ 198 /* name of file : xxx-xxx_xxx-xxx:2,SRFT */
186 199
187 msg = malloc(sizeof(* msg)); 200 msg = malloc(sizeof(* msg));
188 if (msg == NULL) 201 if (msg == NULL)
189 goto err; 202 goto err;
190 203
191 msg->msg_filename = strdup(filename); 204 msg->msg_filename = strdup(filename);
192 if (msg->msg_filename == NULL) 205 if (msg->msg_filename == NULL)
193 goto free; 206 goto free;
194 207
195 begin_uid = filename; 208 begin_uid = filename;
196 209
197 uid_len = strlen(begin_uid); 210 uid_len = strlen(begin_uid);
198 211
diff --git a/libetpan/src/low-level/mh/mailmh.c b/libetpan/src/low-level/mh/mailmh.c
index 42cab9d..f8c694d 100644
--- a/libetpan/src/low-level/mh/mailmh.c
+++ b/libetpan/src/low-level/mh/mailmh.c
@@ -875,96 +875,99 @@ int mailmh_folder_add_message_file(struct mailmh_folder * folder,
875{ 875{
876 return mailmh_folder_add_message_file_uid(folder, fd, NULL); 876 return mailmh_folder_add_message_file_uid(folder, fd, NULL);
877} 877}
878 878
879int mailmh_folder_remove_message(struct mailmh_folder * folder, 879int mailmh_folder_remove_message(struct mailmh_folder * folder,
880 uint32_t index) 880 uint32_t index)
881{ 881{
882 char * filename; 882 char * filename;
883 struct mailmh_msg_info * msg_info; 883 struct mailmh_msg_info * msg_info;
884 int res; 884 int res;
885 int r; 885 int r;
886 chashdatum key; 886 chashdatum key;
887 chashdatum data; 887 chashdatum data;
888 888
889#if 0 889#if 0
890 r = mailmh_folder_update(folder); 890 r = mailmh_folder_update(folder);
891 if (r != MAILMH_NO_ERROR) { 891 if (r != MAILMH_NO_ERROR) {
892 res = r; 892 res = r;
893 goto err; 893 goto err;
894 } 894 }
895#endif 895#endif
896 896
897 r = mailmh_folder_get_message_filename(folder, index, &filename); 897 r = mailmh_folder_get_message_filename(folder, index, &filename);
898 if (filename == NULL) { 898 if (filename == NULL) {
899 res = r; 899 res = r;
900 goto err; 900 goto err;
901 } 901 }
902 902
903 if (unlink(filename) == -1) { 903 if (unlink(filename) == -1) {
904 res = MAILMH_ERROR_FILE; 904 res = MAILMH_ERROR_FILE;
905 goto free; 905 goto free;
906 } 906 }
907 907
908 key.data = &index; 908 key.data = &index;
909 key.len = sizeof(index); 909 key.len = sizeof(index);
910 r = chash_get(folder->fl_msgs_hash, &key, &data); 910 r = chash_get(folder->fl_msgs_hash, &key, &data);
911#if 0 911#if 0
912 msg_info = cinthash_find(folder->fl_msgs_hash, index); 912 msg_info = cinthash_find(folder->fl_msgs_hash, index);
913#endif 913#endif
914 if (r == 0) { 914 if (r == 0) {
915 msg_info = data.data; 915 msg_info = data.data;
916 916
917 carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); 917 carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index);
918#if 0 918#if 0
919 cinthash_remove(folder->fl_msgs_hash, index); 919 cinthash_remove(folder->fl_msgs_hash, index);
920#endif 920#endif
921 chash_delete(folder->fl_msgs_hash, &key, NULL); 921 chash_delete(folder->fl_msgs_hash, &key, NULL);
922 } 922 }
923 // LR memory leak fixed
924 mailmh_msg_info_free( msg_info );
925 free(filename);
923 926
924 return MAILMH_NO_ERROR; 927 return MAILMH_NO_ERROR;
925 928
926 free: 929 free:
927 free(filename); 930 free(filename);
928 err: 931 err:
929 return res; 932 return res;
930} 933}
931 934
932 935
933int mailmh_folder_move_message(struct mailmh_folder * dest_folder, 936int mailmh_folder_move_message(struct mailmh_folder * dest_folder,
934 struct mailmh_folder * src_folder, 937 struct mailmh_folder * src_folder,
935 uint32_t index) 938 uint32_t index)
936{ 939{
937 int fd; 940 int fd;
938 char * filename; 941 char * filename;
939 int r; 942 int r;
940 943
941#if 0 944#if 0
942 r = mailmh_folder_update(dest_folder); 945 r = mailmh_folder_update(dest_folder);
943 if (r != MAILMH_NO_ERROR) 946 if (r != MAILMH_NO_ERROR)
944 return r; 947 return r;
945 r = mailmh_folder_update(src_folder); 948 r = mailmh_folder_update(src_folder);
946 if (r != MAILMH_NO_ERROR) 949 if (r != MAILMH_NO_ERROR)
947 return r; 950 return r;
948#endif 951#endif
949 952
950 /* move on the same filesystem */ 953 /* move on the same filesystem */
951 r = mailmh_folder_get_message_filename(src_folder, index, &filename); 954 r = mailmh_folder_get_message_filename(src_folder, index, &filename);
952 if (r != MAILMH_NO_ERROR) 955 if (r != MAILMH_NO_ERROR)
953 return r; 956 return r;
954 957
955 r = mailmh_folder_alloc_msg(dest_folder, filename, &index); 958 r = mailmh_folder_alloc_msg(dest_folder, filename, &index);
956 free(filename); 959 free(filename);
957 if (r == MAILMH_NO_ERROR) 960 if (r == MAILMH_NO_ERROR)
958 return MAILMH_NO_ERROR; 961 return MAILMH_NO_ERROR;
959 962
960 /* move on the different filesystems */ 963 /* move on the different filesystems */
961 r = mailmh_folder_get_message_fd(src_folder, index, O_RDONLY, &fd); 964 r = mailmh_folder_get_message_fd(src_folder, index, O_RDONLY, &fd);
962 if (r != MAILMH_NO_ERROR) 965 if (r != MAILMH_NO_ERROR)
963 return r; 966 return r;
964 967
965 r = mailmh_folder_add_message_file(dest_folder, fd); 968 r = mailmh_folder_add_message_file(dest_folder, fd);
966 if (r != MAILMH_NO_ERROR) { 969 if (r != MAILMH_NO_ERROR) {
967 close(fd); 970 close(fd);
968 return r; 971 return r;
969 } 972 }
970 973
diff --git a/libetpan/src/low-level/pop3/mailpop3.c b/libetpan/src/low-level/pop3/mailpop3.c
index 6f77a3a..bca62d5 100644
--- a/libetpan/src/low-level/pop3/mailpop3.c
+++ b/libetpan/src/low-level/pop3/mailpop3.c
@@ -463,98 +463,101 @@ int mailpop3_apop(mailpop3 * f,
463int mailpop3_user(mailpop3 * f, const char * user) 463int mailpop3_user(mailpop3 * f, const char * user)
464{ 464{
465 char command[POP3_STRING_SIZE]; 465 char command[POP3_STRING_SIZE];
466 int r; 466 int r;
467 char * response; 467 char * response;
468 468
469 if (f->pop3_state != POP3_STATE_AUTHORIZATION) 469 if (f->pop3_state != POP3_STATE_AUTHORIZATION)
470 return MAILPOP3_ERROR_BAD_STATE; 470 return MAILPOP3_ERROR_BAD_STATE;
471 471
472 /* send user command */ 472 /* send user command */
473 473
474 snprintf(command, POP3_STRING_SIZE, "USER %s\r\n", user); 474 snprintf(command, POP3_STRING_SIZE, "USER %s\r\n", user);
475 r = send_command(f, command); 475 r = send_command(f, command);
476 if (r == -1) 476 if (r == -1)
477 return MAILPOP3_ERROR_STREAM; 477 return MAILPOP3_ERROR_STREAM;
478 478
479 response = read_line(f); 479 response = read_line(f);
480 if (response == NULL) 480 if (response == NULL)
481 return MAILPOP3_ERROR_STREAM; 481 return MAILPOP3_ERROR_STREAM;
482 r = parse_response(f, response); 482 r = parse_response(f, response);
483 483
484 if (r != RESPONSE_OK) 484 if (r != RESPONSE_OK)
485 return MAILPOP3_ERROR_BAD_USER; 485 return MAILPOP3_ERROR_BAD_USER;
486 486
487 return MAILPOP3_NO_ERROR; 487 return MAILPOP3_NO_ERROR;
488} 488}
489 489
490int mailpop3_pass(mailpop3 * f, const char * password) 490int mailpop3_pass(mailpop3 * f, const char * password)
491{ 491{
492 char command[POP3_STRING_SIZE]; 492 char command[POP3_STRING_SIZE];
493 int r; 493 int r;
494 char * response; 494 char * response;
495 495
496 if (f->pop3_state != POP3_STATE_AUTHORIZATION) 496 if (f->pop3_state != POP3_STATE_AUTHORIZATION)
497 return MAILPOP3_ERROR_BAD_STATE; 497 return MAILPOP3_ERROR_BAD_STATE;
498 498
499 /* send password command */ 499 /* send password command */
500 500
501 snprintf(command, POP3_STRING_SIZE, "PASS %s\r\n", password); 501 snprintf(command, POP3_STRING_SIZE, "PASS %s\r\n", password);
502 r = send_command(f, command); 502 r = send_command(f, command);
503 if (r == -1) 503 if (r == -1)
504 return MAILPOP3_ERROR_STREAM; 504 return MAILPOP3_ERROR_STREAM;
505 505
506 response = read_line(f); 506 response = read_line(f);
507 if (response == NULL) 507 if (response == NULL)
508 return MAILPOP3_ERROR_STREAM; 508 return MAILPOP3_ERROR_STREAM;
509 r = parse_response(f, response); 509 r = parse_response(f, response);
510 510
511 if (r != RESPONSE_OK) 511 if (r != RESPONSE_OK) {
512 return MAILPOP3_ERROR_BAD_PASSWORD; 512 // LR
513 fprintf(stderr,"POP3 login error. Response from server:\n%s\n",response );
514 return MAILPOP3_ERROR_BAD_PASSWORD;
515 }
513 516
514 f->pop3_state = POP3_STATE_TRANSACTION; 517 f->pop3_state = POP3_STATE_TRANSACTION;
515 518
516 return MAILPOP3_NO_ERROR; 519 return MAILPOP3_NO_ERROR;
517} 520}
518 521
519static int read_list(mailpop3 * f, carray ** result); 522static int read_list(mailpop3 * f, carray ** result);
520 523
521 524
522 525
523static int read_uidl(mailpop3 * f, carray * msg_tab); 526static int read_uidl(mailpop3 * f, carray * msg_tab);
524 527
525 528
526 529
527static int mailpop3_do_uidl(mailpop3 * f, carray * msg_tab) 530static int mailpop3_do_uidl(mailpop3 * f, carray * msg_tab)
528{ 531{
529 char command[POP3_STRING_SIZE]; 532 char command[POP3_STRING_SIZE];
530 int r; 533 int r;
531 char * response; 534 char * response;
532 535
533 if (f->pop3_state != POP3_STATE_TRANSACTION) 536 if (f->pop3_state != POP3_STATE_TRANSACTION)
534 return MAILPOP3_ERROR_BAD_STATE; 537 return MAILPOP3_ERROR_BAD_STATE;
535 538
536 /* send list command */ 539 /* send list command */
537 540
538 snprintf(command, POP3_STRING_SIZE, "UIDL\r\n"); 541 snprintf(command, POP3_STRING_SIZE, "UIDL\r\n");
539 r = send_command(f, command); 542 r = send_command(f, command);
540 if (r == -1) 543 if (r == -1)
541 return MAILPOP3_ERROR_STREAM; 544 return MAILPOP3_ERROR_STREAM;
542 545
543 response = read_line(f); 546 response = read_line(f);
544 if (response == NULL) 547 if (response == NULL)
545 return MAILPOP3_ERROR_STREAM; 548 return MAILPOP3_ERROR_STREAM;
546 r = parse_response(f, response); 549 r = parse_response(f, response);
547 550
548 if (r != RESPONSE_OK) 551 if (r != RESPONSE_OK)
549 return MAILPOP3_ERROR_CANT_LIST; 552 return MAILPOP3_ERROR_CANT_LIST;
550 553
551 r = read_uidl(f, msg_tab); 554 r = read_uidl(f, msg_tab);
552 if (r != MAILPOP3_NO_ERROR) 555 if (r != MAILPOP3_NO_ERROR)
553 return r; 556 return r;
554 557
555 return MAILPOP3_NO_ERROR; 558 return MAILPOP3_NO_ERROR;
556} 559}
557 560
558 561
559 562
560static int mailpop3_do_list(mailpop3 * f) 563static int mailpop3_do_list(mailpop3 * f)