Commit ef1c18b9 authored by Dan Fandrich's avatar Dan Fandrich
Browse files

Added support for LISTing a single POP3 message

Added tests for a number of POP3 LIST operations, including one
that shows a curl problem when listing no messages, so is
disabled.
parent 409867e6
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -436,6 +436,24 @@ static CURLcode pop3_state_list_resp(struct connectdata *conn,
  return result;
}

/* for LIST response with a given message */
static CURLcode pop3_state_list_single_resp(struct connectdata *conn,
                                     int pop3code,
                                     pop3state instate)
{
  CURLcode result = CURLE_OK;
  struct SessionHandle *data = conn->data;
  (void)instate; /* no use for this yet */

  if(pop3code != 'O') {
    failf(data, "Invalid message. %c", pop3code);
    result = CURLE_REMOTE_FILE_NOT_FOUND;
  }

  state(conn, POP3_STOP);
  return result;
}

/* start the DO phase for RETR */
static CURLcode pop3_retr(struct connectdata *conn)
{
@@ -460,6 +478,9 @@ static CURLcode pop3_list(struct connectdata *conn)
  if(result)
    return result;

  if (strlen(pop3c->mailbox))
    state(conn, POP3_LIST_SINGLE);
  else
    state(conn, POP3_LIST);
  return result;
}
@@ -523,6 +544,10 @@ static CURLcode pop3_statemach_act(struct connectdata *conn)
      result = pop3_state_list_resp(conn, pop3code, pop3c->state);
      break;

    case POP3_LIST_SINGLE:
      result = pop3_state_list_single_resp(conn, pop3code, pop3c->state);
      break;

    case POP3_QUIT:
      /* fallthrough, just stop! */
    default:
@@ -747,7 +772,7 @@ CURLcode pop3_perform(struct connectdata *conn,
  /* If mailbox is empty, then assume user wants listing for mail IDs,
   * otherwise, attempt to retrieve the mail-id stored in mailbox
   */
  if (strlen(pop3c->mailbox))
  if (strlen(pop3c->mailbox) && !conn->data->set.ftp_list_only)
    result = pop3_retr(conn);
  else
    result = pop3_list(conn);
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ typedef enum {
  POP3_PASS,
  POP3_STARTTLS,
  POP3_LIST,
  POP3_LIST_SINGLE,
  POP3_RETR,
  POP3_QUIT,
  POP3_LAST  /* never used */
+1 −0
Original line number Diff line number Diff line
@@ -3,3 +3,4 @@
# per line.
# Lines starting with '#' letters are treated as comments.
564
811
+2 −1
Original line number Diff line number Diff line
@@ -70,7 +70,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
 test313 test1115 test578 test579 test1116 test1200 test1201 test1202	   \
 test1203 test1117 test1118 test1119 test1120 test1300 test1301 test1302 \
 test1303 test320 test321 test322 test323 test324 test1121 test581 test580 \
 test1304 test1305 test1306 test1307 test582 test583
 test1304 test1305 test1306 test1307 test582 test583 test808 test809       \
 test810 test811

filecheck:
	@mkdir test-place; \

tests/data/test808

0 → 100644
+41 −0
Original line number Diff line number Diff line
<testcase>
<info>
<keywords>
POP3
LIST
</keywords>
</info>

#
# Server-side
<reply>
<servercmd>
REPLY LIST +OK 808 100
</servercmd>
</reply>

#
# Client-side
<client>
<server>
pop3
</server>
 <name>
POP3 LIST one message
 </name>
 <command>
pop3://%HOSTIP:%POP3PORT/808 -l -u user:secret
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
USER user
PASS secret
LIST 808
QUIT
</protocol>
</verify>
</testcase>
Loading