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

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

More missing #includes exposed when compiling on easterly.

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