+ if (!id_exist)
+ return 0;
+
+ fp = fopen(isChroot() ? AUTH_FILE : KEYSFILE_PATH, "r+");
+
+ if (!fp)
+ return 0;
+
+#ifndef WIN32
+ if((chmod(AUTH_FILE, 0440)) < 0) {
+ merror("addagent: ERROR: Cannot chmod %s: %s", AUTH_FILE, strerror(errno));
+ }
+#endif
+
+#ifdef REUSE_ID
+ long fp_seek;
+ size_t fp_read;
+ char *buffer;
+ char buf_discard[OS_BUFFER_SIZE];
+ struct stat fp_stat;
+
+ if (stat(AUTH_FILE, &fp_stat) < 0) {
+ fclose(fp);
+ return 0;
+ }
+
+ buffer = malloc(fp_stat.st_size);
+ if (!buffer) {
+ fclose(fp);
+ return 0;
+ }
+
+ fsetpos(fp, &fp_pos);
+ fp_seek = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ fp_read = fread(buffer, sizeof(char), fp_seek, fp);
+ fgets(buf_discard, OS_BUFFER_SIZE - 1, fp);
+
+ if (!feof(fp))
+ fp_read += fread(buffer + fp_read, sizeof(char), fp_stat.st_size, fp);
+
+ fclose(fp);
+ fp = fopen(AUTH_FILE, "w");
+
+ if (!fp) {
+ free(buffer);
+ return 0;
+ }
+
+ fwrite(buffer, sizeof(char), fp_read, fp);
+
+#else
+ /* Remove the agent, but keep the id */
+ fsetpos(fp, &fp_pos);
+ fprintf(fp, "%s #*#*#*#*#*#*#*#*#*#*#", u_id);
+#endif
+ fclose(fp);
+
+ full_name = getFullnameById(u_id);
+ if (full_name)
+ delete_agentinfo(full_name);
+
+ /* Remove counter for ID */
+ OS_RemoveCounter(u_id);
+ return 1;
+}
+
+int OS_IsValidID(const char *id)