File: support.h

package info (click to toggle)
proftpd-dfsg 1.3.8.c%2Bdfsg-4%2Bdeb13u1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 56,576 kB
  • sloc: perl: 286,353; ansic: 241,458; sh: 16,681; php: 11,586; makefile: 1,092; xml: 93
file content (147 lines) | stat: -rw-r--r-- 4,494 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
 * ProFTPD - FTP server daemon
 * Copyright (c) 1997, 1998 Public Flood Software
 * Copyright (c) 1999, 2000 MacGyver aka Habeeb J. Dihu <macgyver@tos.net>
 * Copyright (c) 2001-2020 The ProFTPD Project team
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
 *
 * As a special exemption, Public Flood Software/MacGyver aka Habeeb J. Dihu
 * and other respective copyright holders give permission to link this program
 * with OpenSSL, and distribute the resulting executable, without including
 * the source code for OpenSSL in the source distribution.
 */

/* Non-specific support functions. */

#ifndef PR_SUPPORT_H
#define PR_SUPPORT_H

#include <sys/time.h>
#include <time.h>

#if defined(NAME_MAX)
# define NAME_MAX_GUESS		(NAME_MAX)
#elif defined(MAXNAMELEN)
# define NAME_MAX_GUESS		(MAXNAMELEN - 1)
#else
# define NAME_MAX_GUESS		(255)
#endif

/* Functions [optionally] provided by libsupp.a */
#ifndef HAVE_GETOPT
int getopt(int, char * const [], const char *);
extern char *optarg;
extern int optind,opterr,optopt;

#ifndef HAVE_GETOPT_LONG
struct option {
  const char *name;
  int has_arg;
  int *flag;
  int val;
};

int getopt_long(int, char * const [], const char *, const struct option *,
  int *);
# endif /* !HAVE_GETOPT_LONG */
#endif /* !HAVE_GETOPT */

char *dir_interpolate(pool *, const char *);
char *dir_abs_path(pool *, const char *, int);

/* Performs chroot-aware handling of symlinks. */
int dir_readlink(pool *, const char *, char *, size_t, int);
#define PR_DIR_READLINK_FL_HANDLE_REL_PATH		0x0001

char *dir_realpath(pool *, const char *);
char *dir_canonical_path(pool *, const char *);
char *dir_canonical_vpath(pool *, const char *);
char *dir_best_path(pool *, const char *);

/* Schedulables. */
void schedule(void (*f)(void *, void *, void *, void *), int, void *, void *,
  void *, void *);
void run_schedule(void);
void restart_daemon(void *, void *, void *, void *);
void shutdown_end_session(void *, void *, void *, void *);

long get_name_max(char *path, int fd);

mode_t file_mode(const char *);
mode_t file_mode2(pool *, const char *);

mode_t symlink_mode(const char *);
mode_t symlink_mode2(pool *, const char *);

int file_exists(const char *);
int file_exists2(pool *, const char *);

int dir_exists(const char *);
int dir_exists2(pool *, const char *);

int exists(const char *);
int exists2(pool *, const char *);

char *safe_token(char **);
int check_shutmsg(pool *, const char *, time_t *, time_t *, time_t *, char *,
  size_t);

void pr_memscrub(void *, size_t);

void pr_getopt_reset(void);
struct tm *pr_gmtime(pool *, const time_t *);
struct tm *pr_localtime(pool *, const time_t *);
const char *pr_strtime(time_t);
const char *pr_strtime2(time_t, int);

/* Preferred version.  Allocates the returned string out of the given pool. */
const char *pr_strtime3(pool *, time_t, int);

int pr_gettimeofday_millis(uint64_t *);
int pr_timeval2millis(struct timeval *, uint64_t *);

/* Wrappers around snprintf(3)/vsnprintf(3) which carefully check the
 * return values.
 */

int pr_snprintf(char *buf, size_t bufsz, const char *fmt, ...)
#ifdef __GNUC__
  __attribute__ ((format (printf, 3, 4)));
#else
  ;
#endif

/* Just like pr_snprintf(), except that the caller can provide their
 * source code location.
 */
int pr_snprintfl(const char *file, int lineno, char *buf, size_t bufsz,
  const char *fmt, ...)
#ifdef __GNUC__
  __attribute__ ((format (printf, 5, 6)));
#else
  ;
#endif

int pr_vsnprintf(char *buf, size_t bufsz, const char *fmt, va_list msg);
int pr_vsnprintfl(const char *file, int lineno, char *buf, size_t bufsz,
  const char *fmt, va_list msg);

/* Resolve/substitute any "%u" variables in the path.  Returns the resolved
 * path, or NULL if there was an error.
 */
const char *path_subst_uservar(pool *p, const char **path);

#endif /* PR_SUPPORT_H */