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

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

Implemented setting the username from python during authentication.

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  char *username;
100
101  char msg[NDG_MESSAGE_LEN];
102  /* Send version verification message.  */
103  if (bbftpd_private_recv(msg, NDG_MESSAGE_LEN, logmessage) == -1) {
104    return -1;
105  }
106  else {
107    syslog(LOG_DEBUG, "Received auth message: %s", msg);
108  }
109
110#ifdef NDG_PYTHON_EMBED
111  if (bbftpd_private_auth_callback(logmessage) == -1) {
112    return -1;
113  }
114  if ((username = bbftpd_private_auth_getusername(logmessage)) == NULL) {
115    return -1;
116  }
117   
118  sprintf(currentusername, "%.*s", MAXLEN, username);
119#endif
120
121  return 0 ;
122}
123
124
125#ifdef NDG_AUTH
126
127/*
128** bbftpd_private_authz_control :
129**
130**    Routine to authorise bbftp control commands. 
131**
132**    INPUT variables:
133**        msgcode : The message code from struct message
134**        transferoptions : TROPT_* options
135**        path : path to apply command to
136**
137**    OUTPUT variables:
138**        logmessage : to write the error message in case of failure
139**
140**    RETURN:
141**       -1  Authorisation failed
142**        0  OK
143**
144**
145*/
146int bbftpd_private_authz_control(int msgcode, int transferoption, char *path, char *logmessage)
147{
148
149  switch (msgcode) {
150  case MSG_CHDIR_V2:
151    syslog(LOG_DEBUG, "Authz: MSG_DIR 0x%x %s", transferoption, path);
152    break;
153  case MSG_LIST_V2:
154    syslog(LOG_DEBUG, "Authz: MSG_LIST_V2 0x%x %s", transferoption, path);
155    break;
156  case MSG_MKDIR_V2:
157    syslog(LOG_DEBUG, "Authz: MSG_MKDIR_V2 0x%x %s", transferoption, path);
158    break;
159  case MSG_RM:
160    syslog(LOG_DEBUG, "Authz: MSG_RM 0x%x %s", transferoption, path);
161    break;
162  case MSG_STAT:
163    syslog(LOG_DEBUG, "Authz: MSG_STAT 0x%x %s", transferoption, path);
164    break;
165  case MSG_DF:
166    syslog(LOG_DEBUG, "Authz: MSG_DF 0x%x %s", transferoption, path);
167    break;
168  default:
169    sprintf(logmessage, "Unrecognised message to authorise %d", msgcode);
170    return -1;
171  }
172
173  return 0;
174}
175
176
177/*
178** bbftpd_private_authz_retr :
179**
180**     Routine to authorise file retrieve requests.
181**
182**     INPUT variables:
183**         path: the file to retrieve
184**
185**    OUTPUT variables:
186**        logmessage : to write the error message in case of failure
187**
188**    RETURN:
189**       -1  Authorisation failed
190**        0  OK
191**
192*/
193int bbftpd_private_authz_retr(char *path, char *logmessage)
194{
195  syslog(LOG_DEBUG, "Authz: RETR %s", path);
196  return 0;
197}
198
199/*
200** bbftpd_private_authz_store :
201**
202**     Routine to authorise file store requests.
203**
204**     INPUT variables:
205**         path: the file to store
206**
207**    OUTPUT variables:
208**        logmessage : to write the error message in case of failure
209**
210**    RETURN:
211**       -1  Authorisation failed
212**        0  OK
213**
214*/
215
216int bbftpd_private_authz_store(char *path, char *logmessage)
217{
218  syslog(LOG_DEBUG, "Authz: STORE %s", path);
219  return 0;
220}
221#endif // NDG_AUTH
Note: See TracBrowser for help on using the repository browser.