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

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

Python code can read an authorisation message from the client.

Test cases confirm message passing client->server->python is working.

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
39extern char currentusername[MAXLEN] ;
40
41#ifdef NDG_PYTHON_EMBED
42int bbftpd_private_auth_callback(char *logmessage);
43#endif
44
45/*******************************************************************************
46** bbftpd_private_auth :                                                       *
47**                                                                             *
48**      Routine to do the private authentication. This routine just have to    *
49**      send or to receive private data to the bbftpd daemon. For that it will *
50**      use the two routines :                                                 *
51**          bbftpd_private_send                                                *
52**          bbftpd_private_recv                                                *
53**      The reception of the OK or BAD message will be done by the calling     *
54**      routine, so if this routine has no check to do (for example just       *
55**      sending username and password) it will just call bbftp_private_send    *
56**      twice and let the calling program check if it is OK or BAD.            *
57**                                                                             *
58**      The bbftp_private_send routine has to be called with the following     *
59**      parameters:                                                            *
60**                                                                             *
61**      int bbftpd_private_send(char *buffertosend,int buffertosendlength,     *
62**                             char *logmessage)                               *
63**          char    *buffertosend = string to be send to the daemon            *
64**          int     buffertosendlength = length of the string                  *
65**          char    *logmessage                                                *
66**                                                                             *
67**      and return 0 in case of success, -1 in case of error with logmessage   *
68**      filled                                                                 *
69**                                                                             *
70**      The bbftpd_private_recv routine has to be called with the following    *
71**      parameters:                                                            *
72**                                                                             *
73**      int bbftpd_private_recv(char *buffertorecv,int lengthtoreceive,        *
74**                             char *logmessage)                               *
75**          char    *buffertorecv = string to be send to the daemon            *
76**          int     lengthtorecv = length to be received                       *
77**          char    *logmessage                                                *
78**                                                                             *
79**      and return number of byte received in case of success, -1 in case of   *
80**      error with logmessage filled                                           *
81**      It is the duty of the programmer to take care that the buffer is large *
82**      enought                                                                *
83**                                                                             *
84**                                                                             *
85**      OUPUT variable :                                                       *
86**          logmessage :  to write the error message in case of error          *
87**                                                                             *
88**      GLOBAL VARIABLE USED :                                                 *
89**                                                                             *
90**                                                                             *
91**      RETURN:                                                                *
92**          -1  Unrecoverable error                                            *
93**           0  OK                                                             *
94**                                                                             *
95*******************************************************************************/
96
97int bbftpd_private_auth(char *logmessage)
98{
99
100#ifdef NDG_PYTHON_EMBED
101  char *username;
102
103  if (bbftpd_private_auth_callback(logmessage) == -1) {
104    return -1;
105  }
106  if ((username = bbftpd_private_auth_getusername(logmessage)) == NULL) {
107    return -1;
108  }
109   
110  sprintf(currentusername, "%.*s", MAXLEN, username);
111#else
112
113  char msg[NDG_MESSAGE_LEN];
114  /* Send version verification message.  */
115  if (bbftpd_private_recv(msg, NDG_MESSAGE_LEN, logmessage) == -1) {
116    return -1;
117  }
118  else {
119    syslog(LOG_DEBUG, "Received auth message: %s", msg);
120  }
121
122#endif
123
124  return 0 ;
125}
126
127
128#ifdef NDG_AUTH
129
130/*
131** bbftpd_private_authz_control :
132**
133**    Routine to authorise bbftp control commands. 
134**
135**    INPUT variables:
136**        msgcode : The message code from struct message
137**        transferoptions : TROPT_* options
138**        path : path to apply command to
139**
140**    OUTPUT variables:
141**        logmessage : to write the error message in case of failure
142**
143**    RETURN:
144**       -1  Authorisation failed
145**        0  OK
146**
147**
148*/
149int bbftpd_private_authz_control(int msgcode, int transferoption, char *path, char *logmessage)
150{
151
152  switch (msgcode) {
153  case MSG_CHDIR_V2:
154    syslog(LOG_DEBUG, "Authz: MSG_DIR 0x%x %s", transferoption, path);
155    break;
156  case MSG_LIST_V2:
157    syslog(LOG_DEBUG, "Authz: MSG_LIST_V2 0x%x %s", transferoption, path);
158    break;
159  case MSG_MKDIR_V2:
160    syslog(LOG_DEBUG, "Authz: MSG_MKDIR_V2 0x%x %s", transferoption, path);
161    break;
162  case MSG_RM:
163    syslog(LOG_DEBUG, "Authz: MSG_RM 0x%x %s", transferoption, path);
164    break;
165  case MSG_STAT:
166    syslog(LOG_DEBUG, "Authz: MSG_STAT 0x%x %s", transferoption, path);
167    break;
168  case MSG_DF:
169    syslog(LOG_DEBUG, "Authz: MSG_DF 0x%x %s", transferoption, path);
170    break;
171  default:
172    sprintf(logmessage, "Unrecognised message to authorise %d", msgcode);
173    return -1;
174  }
175
176  return 0;
177}
178
179
180/*
181** bbftpd_private_authz_retr :
182**
183**     Routine to authorise file retrieve requests.
184**
185**     INPUT variables:
186**         path: the file to retrieve
187**
188**    OUTPUT variables:
189**        logmessage : to write the error message in case of failure
190**
191**    RETURN:
192**       -1  Authorisation failed
193**        0  OK
194**
195*/
196int bbftpd_private_authz_retr(char *path, char *logmessage)
197{
198  syslog(LOG_DEBUG, "Authz: RETR %s", path);
199  return 0;
200}
201
202/*
203** bbftpd_private_authz_store :
204**
205**     Routine to authorise file store requests.
206**
207**     INPUT variables:
208**         path: the file to store
209**
210**    OUTPUT variables:
211**        logmessage : to write the error message in case of failure
212**
213**    RETURN:
214**       -1  Authorisation failed
215**        0  OK
216**
217*/
218
219int bbftpd_private_authz_store(char *path, char *logmessage)
220{
221  syslog(LOG_DEBUG, "Authz: STORE %s", path);
222  return 0;
223}
224#endif // NDG_AUTH
Note: See TracBrowser for help on using the repository browser.