source: TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/bbftp_private_user.c @ 1428

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/bbftp_private_user.c@1428
Revision 1428, 9.7 KB checked in by spascoe, 13 years ago (diff)

Several more includes missing. Stand alone daemon/client are now built
with more warnings displayed.

Line 
1/*
2 * bbftpc/bbftp_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 bbftp_private_user.c   v 2.1.0 2001/05/21  - Routines creation
27
28*****************************************************************************/
29
30#include <bbftp.h>
31
32#include <stdio.h>
33#include <stdlib.h>
34#if HAVE_STRING_H
35# include <string.h>
36#endif
37
38#include <bbftp_private_user.h>
39#include <client.h>
40#include <client_proto.h>
41
42#ifdef NDG_AUTH
43int ndg_client_auth(char *logmessage);
44#endif // NDG_PRIVATE_AUTH
45
46
47/*
48** username contain a pointer to the string given with the -u flag
49*/
50extern char *username ;
51/*
52** privatestr contain a pointer to the string given with the -P flag
53*/
54extern char *privatestr ;
55
56extern int debug;
57
58/* From bbftp_util.c */
59void PRINTMESSAGE(FILE *strm , int flag, int errcode, int tok, char *fmt, ...);
60
61#ifndef NDG_PYTHON_EMBED
62/* prototypes */
63static int ndg_message_recv(char **buffer, int *length, char *logmessage);
64static int ndg_message_send(char *buffer, int length, char *logmessage);
65#endif
66
67/*******************************************************************************
68** bbftp_private_getargs :                                                     *
69**                                                                             *
70**      Routine to get arguments for private authentication. This routine is   *
71**      called after several tests have been made. The variable to be set are  *
72**      to be define in bbftp_private_user.h to be used by other routines.     *
73**                                                                             *
74**      OUPUT variable :                                                       *
75**          logmessage :  to write the error message in case of error          *
76**                                                                             *
77**      GLOBAL VARIABLE USED :                                                 *
78**                                                                             *
79**                                                                             *
80**      RETURN:                                                                *
81**          -1  Unrecoverable error                                            *
82**           0  OK                                                             *
83**                                                                             *
84*******************************************************************************/
85
86int bbftp_private_getargs(char *logmessage)
87{
88    return 0 ;
89}
90
91/*******************************************************************************
92** bbftp_private_auth :                                                        *
93**                                                                             *
94**      Routine to do the private authentication. This routine just have to    *
95**      send or to receive private data to the bbftpd daemon. For that it will *
96**      use the two routines :                                                 *
97**          bbftp_private_send                                                 *
98**          bbftp_private_recv                                                 *
99**      The reception of the OK or BAD message will be done by the calling     *
100**      routine, so if this routine has no check to do (for example just       *
101**      sending username and password) it will just call bbftp_private_send    *
102**      twice and let the calling program check if it is OK or BAD.            *
103**                                                                             *
104**      The bbftp_private_send routine has to be called with the following     *
105**      parameters:                                                            *
106**                                                                             *
107**      int bbftp_private_send(char *buffertosend,int buffertosendlength,      *
108**                             char *logmessage)                               *
109**          char    *buffertosend = string to be send to the daemon            *
110**          int     buffertosendlength = length of the string                  *
111**          char    *logmessage                                                *
112**                                                                             *
113**      and return 0 in case of success, -1 in case of error with logmessage   *
114**      filled                                                                 *
115**                                                                             *
116**      The bbftp_private_recv routine has to be called with the following     *
117**      parameters:                                                            *
118**                                                                             *
119**      int bbftp_private_recv(char *buffertorecv,int lengthtoreceive,         *
120**                             char *logmessage)                               *
121**          char    *buffertorecv = buffer to put data received from the       *
122**                                  daemon                                     *
123**          int     lengthtorecv = length of the buffer                        *
124**          char    *logmessage                                                *
125**                                                                             *
126**      and return number of byte received in case of success, -1 in case of   *
127**      error with logmessage filled                                           *
128**      It is the duty of the programmer to be sure that the buffer is large   *
129**      enought                                                                *
130**                                                                             *
131**                                                                             *
132**      OUPUT variable :                                                       *
133**          logmessage :  to write the error message in case of error          *
134**                                                                             *
135**      GLOBAL VARIABLE USED :                                                 *
136**                                                                             *
137**      RETURN:                                                                *
138**          -1  Unrecoverable error                                            *
139**           0  OK                                                             *
140**                                                                             *
141*******************************************************************************/
142
143int bbftp_private_auth(char *logmessage) 
144{
145
146#ifdef NDG_PYTHON_EMBED
147  return ndg_client_auth(logmessage);
148#else
149  char *msg;
150  char default_privatestr[] = "none";
151  int len;
152
153  /* Send version verification message.  */
154  if (ndg_message_send(NDG_HANDSHAKE, strlen(NDG_HANDSHAKE), logmessage) == -1) {
155    return -1;
156  }
157 
158  /* Receive response */
159  if (ndg_message_recv(&msg, &len, logmessage) == -1) {
160    return -1;
161  }
162 
163  if (debug) {
164    PRINTMESSAGE(stdout,CASE_NORMAL,0,0,"Received Auth handshake: %s\n", msg) ;
165  }
166  free(msg);
167
168  /* Send the privatestr */
169  // If there is no private string, send default
170  if (privatestr == NULL) {
171    privatestr = default_privatestr;
172  }
173
174  if (ndg_message_send(privatestr, strlen(privatestr), logmessage) == -1) {
175    return -1;
176  }
177
178  return  0 ;
179#endif // NDG_PRIVATE_AUTH
180}
181
182
183
184#ifndef NDG_PYTHON_EMBED
185/*
186 * Higher level message transfer functions.
187 *
188 */
189
190/**
191 * Send a message, declaring it's length to the client.
192 *
193 * @param buffer a pointer to the message buffer
194 * @param length the number of bytes to send
195 * @param[out] loggmessage is filled with the error message on error
196 * @return 0 if OK, -1 if error
197 */
198static int ndg_message_send(char *buffer, int length, char *logmessage) {
199  char ctrl[NDG_MESSAGE_LEN];
200
201  sprintf(ctrl, "NDG-msg: %i", length);
202  if (bbftp_private_send(ctrl, NDG_MESSAGE_LEN, logmessage) == -1) {
203    return -1;
204  }
205
206  if (bbftp_private_send(buffer, length, logmessage) == -1) {
207    return -1;
208  }
209
210  return 0;
211}
212
213/**
214 * Receive a message of variable length
215 *
216 * @param[out] buffer is set to newly allocated message buffer
217 * @param[out] length is set to the length of the message
218 * @param[out] logmessage is filled with the logmessage on error
219 * @return 0 if OK, -1 if error
220 */
221static int ndg_message_recv(char **buffer, int *length, char *logmessage) {
222  char ctrl[NDG_MESSAGE_LEN];
223
224  if (bbftp_private_recv(ctrl, NDG_MESSAGE_LEN, logmessage) == -1) {
225    return -1;
226  }
227  if (sscanf(ctrl, "NDG-msg: %i", length) != 1) {
228    sprintf(logmessage, "ndg_message_recv ctrl error: %40s", ctrl);
229    return -1;
230  }
231
232  if ((*buffer = (char *)malloc(*length * sizeof(char))) == NULL) {
233    sprintf(logmessage, "ngd_message_recv malloc error");
234    return -1;
235  }
236
237  if (bbftp_private_recv(*buffer, *length, logmessage) == -1) {
238    free(*buffer); *buffer = NULL;
239    return -1;
240  }
241
242  return 0;
243}
244
245#endif // !NDG_PYTHON_EMBED
Note: See TracBrowser for help on using the repository browser.