/* Unix SMB/Netbios implementation. Version 1.9. Samba connection status utility functions Copyright (C) Andrew Tridgell 1992-1999 Copyright (C) Michael Glauche 1999 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "includes.h" extern int DEBUGLEVEL; /******************************************************************* parse the STATUS..LCK file. caller is responsible for freeing *crec. ********************************************************************/ BOOL get_connection_status(struct connect_record **crec, uint32 *connection_count) { FILE *f; pstring fname; int conn; if (crec == NULL || connection_count == NULL) { return False; } pstrcpy(fname,lp_lockdir()); standard_sub_basic(fname); trim_string(fname,"","/"); pstrcat(fname,"/STATUS..LCK"); f = sys_fopen(fname,"r"); if (!f) { DEBUG(0,("Couldn't open status file %s\n",fname)); return False; } DEBUG(5,("Opened status file %s\n",fname)); conn=0; (*crec) = NULL; while (!feof(f)) { (*crec) = Realloc((*crec), (conn+1) * sizeof((*crec)[conn])); if ((*crec) == NULL) { DEBUG(0,("Realloc failed in get_connection_status\n")); return False; } if (fread(&(*crec)[conn],sizeof((*crec)[conn]),1,f) != 1) break; if ((*crec)[conn].cnum == -1) continue; if ( (*crec)[conn].magic == 0x280267 && process_exists((*crec)[conn].pid) ) { DEBUG(10,("cnun : %u \n",(*crec)[conn].cnum)); conn++; } } fclose(f); (*connection_count)=conn; return True; }