1/*
2 * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of the Institute nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#include <popper.h>
35RCSID("$Id$");
36
37#ifdef UIDL
38/*
39 *  uidl:   Uidl the contents of a POP maildrop
40 */
41
42int
43pop_uidl (POP *p)
44{
45    MsgInfoList         *   mp;         /*  Pointer to message info list */
46    int		            i;
47    int			    msg_num;
48
49    /*  Was a message number provided? */
50    if (p->parm_count > 0) {
51        msg_num = atoi(p->pop_parm[1]);
52
53        /*  Is requested message out of range? */
54        if ((msg_num < 1) || (msg_num > p->msg_count))
55            return (pop_msg (p,POP_FAILURE,
56                "Message %d does not exist.",msg_num));
57
58        /*  Get a pointer to the message in the message list */
59        mp = &p->mlp[msg_num-1];
60
61        /*  Is the message already flagged for deletion? */
62        if (mp->flags & DEL_FLAG)
63            return (pop_msg (p,POP_FAILURE,
64                "Message %d has been deleted.",msg_num));
65
66        /*  Display message information */
67        return (pop_msg(p,POP_SUCCESS,"%u %s",msg_num,mp->msg_id));
68    }
69
70    /*  Display the entire list of messages */
71    pop_msg(p,POP_SUCCESS,
72	    "%d messages (%ld octets)",
73            p->msg_count-p->msgs_deleted,
74	    p->drop_size-p->bytes_deleted);
75
76    /*  Loop through the message information list.  Skip deleted messages */
77    for (i = p->msg_count, mp = p->mlp; i > 0; i--, mp++) {
78        if (!(mp->flags & DEL_FLAG))
79            fprintf(p->output,"%u %s\r\n",mp->number,mp->msg_id);
80    }
81
82    /*  "." signals the end of a multi-line transmission */
83    fprintf(p->output,".\r\n");
84    fflush(p->output);
85
86    return(POP_SUCCESS);
87}
88#endif /* UIDL */
89