Back to index

citadel  8.12
Functions
expire_policy.c File Reference
#include "sysdep.h"
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>
#include <limits.h>
#include <libcitadel.h>
#include "citadel.h"
#include "server.h"
#include "database.h"
#include "config.h"
#include "room_ops.h"
#include "sysdep_decls.h"
#include "support.h"
#include "msgbase.h"
#include "citserver.h"
#include "ctdl_module.h"
#include "user_ops.h"

Go to the source code of this file.

Functions

void GetExpirePolicy (struct ExpirePolicy *epbuf, struct ctdlroom *qrbuf)
void cmd_gpex (char *argbuf)
void cmd_spex (char *argbuf)

Function Documentation

void cmd_gpex ( char *  argbuf)

Definition at line 89 of file expire_policy.c.

                            {
       struct ExpirePolicy exp;
       struct floor *fl;
       char which[128];

       extract_token(which, argbuf, 0, '|', sizeof which);
       if (!strcasecmp(which, strof(roompolicy))||
           !strcasecmp(which, "room")) { /* Deprecated version */
              memcpy(&exp, &CC->room.QRep, sizeof(struct ExpirePolicy));
       }
       else if (!strcasecmp(which, strof(floorpolicy))||
               !strcasecmp(which, "floor")) { /* Deprecated version */
              fl = CtdlGetCachedFloor(CC->room.QRfloor);
              memcpy(&exp, &fl->f_ep, sizeof(struct ExpirePolicy));
       }
       else if (!strcasecmp(which, strof(mailboxespolicy))||
               !strcasecmp(which, "mailboxes")) {/* Deprecated version */
              memcpy(&exp, &config.c_mbxep, sizeof(struct ExpirePolicy));
       }
       else if (!strcasecmp(which, strof(sitepolicy))||
               !strcasecmp(which, "site")) {/* Deprecated version */
              memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
       }
       else {
              cprintf("%d Invalid keyword \"%s\"\n", ERROR + ILLEGAL_VALUE, which);
              return;
       }

       cprintf("%d %d|%d\n", CIT_OK, exp.expire_mode, exp.expire_value);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void cmd_spex ( char *  argbuf)

Definition at line 124 of file expire_policy.c.

                            {
       struct ExpirePolicy exp;
       struct floor flbuf;
       char which[128];

       memset(&exp, 0, sizeof(struct ExpirePolicy));
       extract_token(which, argbuf, 0, '|', sizeof which);
       exp.expire_mode = extract_int(argbuf, 1);
       exp.expire_value = extract_int(argbuf, 2);

       if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
              cprintf("%d Invalid policy.\n", ERROR + ILLEGAL_VALUE);
              return;
       }

       if (   (!strcasecmp(which, strof(roompolicy)))
              || (!strcasecmp(which, "room"))
       ) {
              if (!is_room_aide()) {
                     cprintf("%d Higher access required.\n", ERROR + HIGHER_ACCESS_REQUIRED);
                     return;
              }
              CtdlGetRoomLock(&CC->room, CC->room.QRname);
              memcpy(&CC->room.QRep, &exp, sizeof(struct ExpirePolicy));
              CtdlPutRoomLock(&CC->room);
              cprintf("%d Room expire policy for '%s' has been updated.\n", CIT_OK, CC->room.QRname);
              syslog(LOG_DEBUG, "Room: %s , Policy: %d , Value: %d",
                     CC->room.QRname,
                     exp.expire_mode,
                     exp.expire_value
              );
              return;
       }

       if (CC->user.axlevel < AxAideU) {
              cprintf("%d Higher access required.\n", ERROR + HIGHER_ACCESS_REQUIRED);
              return;
       }

       if (   (!strcasecmp(which, strof(floorpolicy)))
              || (!strcasecmp(which, "floor"))
       ) {
              lgetfloor(&flbuf, CC->room.QRfloor);
              memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
              lputfloor(&flbuf, CC->room.QRfloor);
              cprintf("%d Floor expire policy has been updated.\n", CIT_OK);
              return;
       }

       else if (     (!strcasecmp(which, strof(mailboxespolicy)))
                     || (!strcasecmp(which, "mailboxes"))
              ) {
              memcpy(&config.c_mbxep, &exp, sizeof(struct ExpirePolicy));
              put_config();
              cprintf("%d Default expire policy for mailboxes set.\n", CIT_OK);
              return;
       }

       else if (     (!strcasecmp(which, strof(sitepolicy)))
                     || (!strcasecmp(which, "site"))
              ) {
              if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
                     cprintf("%d Invalid policy (no higher level)\n",
                            ERROR + ILLEGAL_VALUE);
                     return;
              }
              memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
              put_config();
              cprintf("%d Site expire policy has been updated.\n", CIT_OK);
              return;
       }

       cprintf("%d Invalid keyword '%s'\n", ERROR + ILLEGAL_VALUE, which);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void GetExpirePolicy ( struct ExpirePolicy epbuf,
struct ctdlroom qrbuf 
)

Definition at line 50 of file expire_policy.c.

                                                                         {
       struct floor *fl;

       /* If the room has its own policy, return it */  
       if (qrbuf->QRep.expire_mode != 0) {
              memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
              return;
       }

       /* (non-mailbox rooms)
        * If the floor has its own policy, return it
        */
       if ( (qrbuf->QRflags & QR_MAILBOX) == 0) {
              fl = CtdlGetCachedFloor(qrbuf->QRfloor);
              if (fl->f_ep.expire_mode != 0) {
                     memcpy(epbuf, &fl->f_ep, sizeof(struct ExpirePolicy));
                     return;
              }
       }

       /* (Mailbox rooms)
        * If there is a default policy for mailbox rooms, return it
        */
       if (qrbuf->QRflags & QR_MAILBOX) {
              if (config.c_mbxep.expire_mode != 0) {
                     memcpy(epbuf, &config.c_mbxep,
                            sizeof(struct ExpirePolicy));
                     return;
              }
       }

       /* Otherwise, fall back on the system default */
       memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
}

Here is the call graph for this function:

Here is the caller graph for this function: