source: web/old/remctl-2.14/server/internal.h @ f6f3e91

web
Last change on this file since f6f3e91 was f6f3e91, checked in by Jessica B. Hamrick <jhamrick@…>, 15 years ago

Preserve directory hierarchy (not sure what happened to it)

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * Internal support functions for the remctld daemon.
3 *
4 * Written by Russ Allbery <rra@stanford.edu>
5 * Copyright 2006, 2007, 2008, 2009
6 *     Board of Trustees, Leland Stanford Jr. University
7 *
8 * See LICENSE for licensing terms.
9 */
10
11#ifndef SERVER_INTERNAL_H
12#define SERVER_INTERNAL_H 1
13
14#include <config.h>
15#include <portable/gssapi.h>
16#include <portable/macros.h>
17#include <portable/stdbool.h>
18
19#include <util/util.h>
20
21/* Forward declarations to avoid extra includes. */
22struct iovec;
23
24/*
25 * Used as the default max buffer for the argv passed into the server, and for
26 * the return message from the server.
27 */
28#define MAXBUFFER       64000 
29
30/*
31 * The maximum size of argc passed to the server.  This is an arbitrary limit
32 * to protect against memory-based denial of service attacks on the server.
33 */
34#define MAXCMDARGS      (4 * 1024)
35
36BEGIN_DECLS
37
38/* Holds the information about a client connection. */
39struct client {
40    int fd;                     /* File descriptor of client connection. */
41    char *hostname;             /* Hostname of client (if available). */
42    char *ipaddress;            /* IP address of client as a string. */
43    int protocol;               /* Protocol version number. */
44    gss_ctx_id_t context;       /* GSS-API context. */
45    char *user;                 /* Name of the client as a string. */
46    OM_uint32 flags;            /* Connection flags. */
47    bool keepalive;             /* Whether keep-alive was set. */
48    char *output;               /* Stores output to send to the client. */
49    size_t outlen;              /* Length of output to send to client. */
50    bool fatal;                 /* Whether a fatal error has occurred. */
51};
52
53/* Holds the configuration for a single command. */
54struct confline {
55    char *file;                 /* Config file name. */
56    int lineno;                 /* Config file line number. */
57    struct vector *line;        /* The split configuration line. */
58    char *command;              /* Command (first argument). */
59    char *subcommand;           /* Subcommand (second argument). */
60    char *program;              /* Full file name of executable. */
61    unsigned int *logmask;      /* Zero-terminated list of args to mask. */
62    long stdin_arg;             /* Arg to pass on stdin, -1 for last. */
63    char **acls;                /* Full file names of ACL files. */
64};
65
66/* Holds the complete parsed configuration for remctld. */
67struct config {
68    struct confline **rules;
69    size_t count;
70    size_t allocated;
71};
72
73/* Logging functions. */
74void warn_gssapi(const char *, OM_uint32 major, OM_uint32 minor);
75void warn_token(const char *, int status, OM_uint32 major, OM_uint32 minor);
76void server_log_command(struct iovec **, struct confline *, const char *user);
77
78/* Configuration file functions. */
79struct config *server_config_load(const char *file);
80void server_config_free(struct config *);
81bool server_config_acl_permit(struct confline *, const char *user);
82void server_config_set_gput_file(char *file);
83
84/* Running commands. */
85void server_run_command(struct client *, struct config *, struct iovec **);
86
87/* Freeing the command structure. */
88void server_free_command(struct iovec **);
89
90/* Generic protocol functions. */
91struct client *server_new_client(int fd, gss_cred_id_t creds);
92void server_free_client(struct client *);
93struct iovec **server_parse_command(struct client *, const char *, size_t);
94bool server_send_error(struct client *, enum error_codes, const char *);
95
96/* Protocol v1 functions. */
97bool server_v1_send_output(struct client *, int status);
98void server_v1_handle_commands(struct client *, struct config *);
99
100/* Protocol v2 functions. */
101bool server_v2_send_output(struct client *, int stream);
102bool server_v2_send_status(struct client *, int);
103bool server_v2_send_error(struct client *, enum error_codes, const char *);
104void server_v2_handle_commands(struct client *, struct config *);
105
106END_DECLS
107
108#endif /* !SERVER_INTERNAL_H */
Note: See TracBrowser for help on using the repository browser.