/* For FSCTL_GET_SHADOW_COPY_DATA ...*/
-typedef char SHADOW_COPY_LABEL[25];
+typedef char SHADOW_COPY_LABEL[25]; /* sizeof("@GMT-2004.02.18-15.44.00") + 1 */
struct shadow_copy_data {
/* Total number of shadow volumes currently mounted */
while (True) {
SHADOW_COPY_LABEL *tlabels;
struct dirent *d;
+ int ret;
d = SMB_VFS_NEXT_READDIR(handle, p, NULL);
if (d == NULL) {
return -1;
}
- snprintf(tlabels[shadow_copy_data->num_volumes++], sizeof(*tlabels), "%s",d->d_name);
+ ret = strlcpy(tlabels[shadow_copy_data->num_volumes], d->d_name,
+ sizeof(tlabels[shadow_copy_data->num_volumes]));
+ if (ret != sizeof(tlabels[shadow_copy_data->num_volumes]) - 1) {
+ DEBUG(0,("shadow_copy_get_shadow_copy_data: malformed label %s\n",
+ d->d_name));
+ SMB_VFS_NEXT_CLOSEDIR(handle, p);
+ return -1;
+ }
+ shadow_copy_data->num_volumes++;
shadow_copy_data->labels = tlabels;
}