source: TI05-delivery/trunk/src/bbftp-server-3.2.0/bbftpd/bbftpd_private_user.c @ 1077

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/trunk/src/bbftp-server-3.2.0/bbftpd/bbftpd_private_user.c@1077
Revision 1077, 8.3 KB checked in by spascoe, 13 years ago (diff)

Implemented full client-server handshake. A version message is now
exchanged client->server then server->client. These messages are logged
in debug mode. Message passing is implemented in Python on the server (at the
moment this is only implemented within test/test_embedded.py).

Line 
1/*
2 * bbftpd/bbftpd_private_user.c
3 * Copyright (C) 1999, 2000, 2001, 2002 IN2P3, CNRS
4 * bbftp@in2p3.fr
5 * http://doc.in2p3.fr/bbftp
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */
21
22/****************************************************************************
23
24
25
26 bbftpd_private_user.c  v 2.1.0 2001/05/21  - Routines creation
27
28*****************************************************************************/
29#include <netinet/in.h>
30#include <utime.h>
31
32#include <bbftpd.h>
33#include <daemon_proto.h>
34#include <structures.h>
35#include <syslog.h>
36
37#include <bbftpd_private_user.h>
38
39#ifdef NDG_PYTHON_EMBED
40#include <Python.h>
41#endif
42
43extern char currentusername[MAXLEN] ;
44
45#ifdef NDG_PYTHON_EMBED
46int bbftpd_private_auth_callback(char *logmessage);
47#endif
48
49/*******************************************************************************
50** bbftpd_private_auth :                                                       *
51**                                                                             *
52**      Routine to do the private authentication. This routine just have to    *
53**      send or to receive private data to the bbftpd daemon. For that it will *
54**      use the two routines :                                                 *
55**          bbftpd_private_send                                                *
56**          bbftpd_private_recv                                                *
57**      The reception of the OK or BAD message will be done by the calling     *
58**      routine, so if this routine has no check to do (for example just       *
59**      sending username and password) it will just call bbftp_private_send    *
60**      twice and let the calling program check if it is OK or BAD.            *
61**                                                                             *
62**      The bbftp_private_send routine has to be called with the following     *
63**      parameters:                                                            *
64**                                                                             *
65**      int bbftpd_private_send(char *buffertosend,int buffertosendlength,     *
66**                             char *logmessage)                               *
67**          char    *buffertosend = string to be send to the daemon            *
68**          int     buffertosendlength = length of the string                  *
69**          char    *logmessage                                                *
70**                                                                             *
71**      and return 0 in case of success, -1 in case of error with logmessage   *
72**      filled                                                                 *
73**                                                                             *
74**      The bbftpd_private_recv routine has to be called with the following    *
75**      parameters:                                                            *
76**                                                                             *
77**      int bbftpd_private_recv(char *buffertorecv,int lengthtoreceive,        *
78**                             char *logmessage)                               *
79**          char    *buffertorecv = string to be send to the daemon            *
80**          int     lengthtorecv = length to be received                       *
81**          char    *logmessage                                                *
82**                                                                             *
83**      and return number of byte received in case of success, -1 in case of   *
84**      error with logmessage filled                                           *
85**      It is the duty of the programmer to take care that the buffer is large *
86**      enought                                                                *
87**                                                                             *
88**                                                                             *
89**      OUPUT variable :                                                       *
90**          logmessage :  to write the error message in case of error          *
91**                                                                             *
92**      GLOBAL VARIABLE USED :                                                 *
93**                                                                             *
94**                                                                             *
95**      RETURN:                                                                *
96**          -1  Unrecoverable error                                            *
97**           0  OK                                                             *
98**                                                                             *
99*******************************************************************************/
100
101int bbftpd_private_auth(char *logmessage)
102{
103
104#ifdef NDG_PYTHON_EMBED
105  char *username;
106
107  if (bbftpd_private_auth_callback(logmessage) == -1) {
108    return -1;
109  }
110  if ((username = bbftpd_private_auth_getusername(logmessage)) == NULL) {
111    return -1;
112  }
113   
114  sprintf(currentusername, "%.*s", MAXLEN, username);
115#else
116
117  char msg[NDG_MESSAGE_LEN];
118  /* Receive version verification message.  */
119  if (bbftpd_private_recv(msg, NDG_MESSAGE_LEN, logmessage) == -1) {
120    return -1;
121  }
122  else {
123    syslog(LOG_DEBUG, "Received auth message: %s", msg);
124  }
125
126  /* Send response */
127  sprintf(msg, "%.*s", NDG_MESSAGE_LEN - 1, NDG_HANDSHAKE);
128  if (bbftpd_private_send(msg, NDG_MESSAGE_LEN, logmessage) == -1) {
129    return -1;
130  }
131
132#endif
133
134  return 0 ;
135}
136
137
138#ifdef NDG_AUTH
139
140/*
141** bbftpd_private_authz_control :
142**
143**    Routine to authorise bbftp control commands. 
144**
145**    INPUT variables:
146**        msgcode : The message code from struct message
147**        transferoptions : TROPT_* options
148**        path : path to apply command to
149**
150**    OUTPUT variables:
151**        logmessage : to write the error message in case of failure
152**
153**    RETURN:
154**       -1  Authorisation failed
155**        0  OK
156**
157**
158*/
159int bbftpd_private_authz_control(int msgcode, int transferoption, char *path, char *logmessage)
160{
161
162  switch (msgcode) {
163  case MSG_CHDIR_V2:
164    syslog(LOG_DEBUG, "Authz: MSG_DIR 0x%x %s", transferoption, path);
165    break;
166  case MSG_LIST_V2:
167    syslog(LOG_DEBUG, "Authz: MSG_LIST_V2 0x%x %s", transferoption, path);
168    break;
169  case MSG_MKDIR_V2:
170    syslog(LOG_DEBUG, "Authz: MSG_MKDIR_V2 0x%x %s", transferoption, path);
171    break;
172  case MSG_RM:
173    syslog(LOG_DEBUG, "Authz: MSG_RM 0x%x %s", transferoption, path);
174    break;
175  case MSG_STAT:
176    syslog(LOG_DEBUG, "Authz: MSG_STAT 0x%x %s", transferoption, path);
177    break;
178  case MSG_DF:
179    syslog(LOG_DEBUG, "Authz: MSG_DF 0x%x %s", transferoption, path);
180    break;
181  default:
182    sprintf(logmessage, "Unrecognised message to authorise %d", msgcode);
183    return -1;
184  }
185
186  return 0;
187}
188
189
190/*
191** bbftpd_private_authz_retr :
192**
193**     Routine to authorise file retrieve requests.
194**
195**     INPUT variables:
196**         path: the file to retrieve
197**
198**    OUTPUT variables:
199**        logmessage : to write the error message in case of failure
200**
201**    RETURN:
202**       -1  Authorisation failed
203**        0  OK
204**
205*/
206int bbftpd_private_authz_retr(char *path, char *logmessage)
207{
208  syslog(LOG_DEBUG, "Authz: RETR %s", path);
209  return 0;
210}
211
212/*
213** bbftpd_private_authz_store :
214**
215**     Routine to authorise file store requests.
216**
217**     INPUT variables:
218**         path: the file to store
219**
220**    OUTPUT variables:
221**        logmessage : to write the error message in case of failure
222**
223**    RETURN:
224**       -1  Authorisation failed
225**        0  OK
226**
227*/
228
229int bbftpd_private_authz_store(char *path, char *logmessage)
230{
231  syslog(LOG_DEBUG, "Authz: STORE %s", path);
232  return 0;
233}
234#endif // NDG_AUTH
Note: See TracBrowser for help on using the repository browser.