commit 6bde26a00523a50afcd71b4cb193c4b5cfe4578d Author: q3aql Date: Sat Jun 2 15:55:06 2018 +0200 Release easy-samba 1.4 diff --git a/src/easy-samba b/src/easy-samba new file mode 100755 index 0000000..233dc1a --- /dev/null +++ b/src/easy-samba @@ -0,0 +1,489 @@ +#!/bin/bash + +############################################################## +# Crear carpetas compartidas en Linux # +# U. Modificacion: 02-06-2018 # +# Autor: q3aql # +# Contacto: q3aql@openmailbox.org # +# Licencia: GPL v2.0 # +############################################################## +VERSION="1.4" +M_DATE="020618" + +# Parametros globales +linuxSambaFolder="/opt/easy-samba" +sambaConfig="/etc/samba/smb.conf" +sambaBackup="/etc/samba/smb.conf.orig" +homeUsers="/home" +homeUsersList="/tmp/easy-samba-users.list" +sambaFoldersList="/tmp/easy-samba-folders.list" +sambaSedFolder="/tmp/easy-samba/word/" + +# Mostrar aviso de usuario de usuario root +function rootMessage() { + echo "" + echo "* Nota: Recuerda haber ejecutado como root!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue +} + +# Funcion para realizar copia del fichero smb.conf original +function backupSmbConf() { + if [ -f ${sambaBackup} ] ; then + echo "OK" > /dev/null + else + echo "" >> ${sambaConfig} + echo "" >> ${sambaConfig} + cp -rf ${sambaConfig} ${sambaBackup} 2> /dev/null + fi +} + +# Funcion para eliminar espacios y simbolos +# Sintaxis: convertText "" +function convertText() { + wordToConvert=${1} + sambaSedFile="${sambaSedFolder}/easy-samba-${RANDOM}.txt" + mkdir -p ${sambaSedFolder} && chmod 777 -R ${sambaSedFolder} 2> /dev/null + echo "${wordToConvert}" > ${sambaSedFile} + # Borrar espacios + sed -i 's/ /_/g' "${sambaSedFile}" &> /dev/null + # Borrar simbolos + symbolsList="[ ] @ { } | \ / ~ # $ % & ? ¿ = ( ) < > ! ¡" + for findSymbol in ${symbolsList} ; do + sed -i "s/${findSymbol}//g" "${sambaSedFile}" &> /dev/null + done + # Borrar el resto de simbolos + sed -i 's/*//g' "${sambaSedFile}" &> /dev/null + sed -i 's/"//g' "${sambaSedFile}" &> /dev/null + sed -i "s/^//g" "${sambaSedFile}" &> /dev/null + # Cambiar algunos simbolos + sed -i 's/+/_/g' "${sambaSedFile}" &> /dev/null + sed -i 's/:/-/g' "${sambaSedFile}" &> /dev/null + sed -i 's/;/-/g' "${sambaSedFile}" &> /dev/null + # Mostrar texto convertido + wordToConvert=$(cat ${sambaSedFile}) + echo ${wordToConvert} +} + +# Funcion para crear enlace en el escritorio/home de los usuarios +# Sintaxis: createFolderLink [carpeta] +function createFolderLink() { +echo -n "* Deseas crear un enlace en el escritorio/home para los usuarios locales (s[*]/n): " ; read createLink +if [ "${createLink}" == "n" ] ; then + echo "nule" > /dev/null +else + if [ "$(ls -A ${homeUsers})" ] ; then + cd ${homeUsers} + ls > ${homeUsersList} + for userDetected in $(cat ${homeUsersList}) ; do + if [ -d ${homeUsers}/${userDetected}/Desktop ] ; then + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/Desktop/ 2> /dev/null + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escritorio ] ; then + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/Escritorio/ 2> /dev/null + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escriptori ] ; then + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/Escriptori/ 2> /dev/null + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + else + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + fi + done + if [ ${output} -eq 0 ] ; then + echo "* Enlaces creados correctamente!" + else + echo "* Error: Fallo al crear los enlaces!" + fi + else + echo "* Usuarios no encontrados en ${homeUsers}" + fi +fi +} + +# Funcion para borrar los enlaces en el escritorio/home de los usuarios +# Sintaxis: deleteFolderLink [carpeta] +function deleteFolderLink() { +echo -n "* Deseas borrar los enlaces en el escritorio/home de los usuarios locales (s[*]/n): " ; read deleteLink +if [ "${deleteLink}" == "n" ] ; then + echo "nule" > /dev/null +else + if [ "$(ls -A ${homeUsers})" ] ; then + cd ${homeUsers} + ls > ${homeUsersList} + for userDetected in $(cat ${homeUsersList}) ; do + if [ -d ${homeUsers}/${userDetected}/Desktop ] ; then + rm -f ${homeUsers}/${userDetected}/Desktop/${1} 2> /dev/null + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escritorio ] ; then + rm -f ${homeUsers}/${userDetected}/Escritorio/${1} 2> /dev/null + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escriptori ] ; then + rm -f ${homeUsers}/${userDetected}/Escriptori/${1} 2> /dev/null + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + else + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + fi + done + if [ ${output} -eq 0 ] ; then + echo "* Enlaces borrados correctamente!" + else + echo "* Error: Fallo al borrar los enlaces!" + fi + else + echo "* Usuarios no encontrados en ${homeUsers}" + fi +fi +} + +# Funcion para crear carpeta compartida con acceso para todos +function newFolderEveryone() { + echo "" + echo -n "* Introduce el nombre de la carpeta que deseas crear (sin acentos): " ; read folder + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + echo "* Debes introducir un nombre de carpeta!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + echo "* La carpeta '${folder}' ya está creada, elige otro nombre" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + echo "* Error: Fallo al crear la carpeta compartida '${folder}'" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + chmod 777 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = yes" >> ${sambaConfig} + echo "read only = no" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + echo "* Carpeta compartida '${folder}' creada con exito!" + createFolderLink ${folder} + fi + fi +} + +# Funcion para crear carpeta compartida de solo lectura +function newFolderReadOnly() { + echo "" + echo -n "* Introduce el nombre de la carpeta que deseas crear (sin acentos): " ; read folder + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + echo "* Debes introducir un nombre de carpeta!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + echo "* La carpeta '${folder}' ya está creada, elige otro nombre" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + echo "* Error: Fallo al crear la carpeta compartida '${folder}'" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + chmod 777 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = no" >> ${sambaConfig} + echo "read only = yes" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + echo "* Carpeta compartida '${folder}' (solo lectura) creada con exito!" + createFolderLink ${folder} + fi + fi +} + +# Crear carpeta compartida para un usuario +function newFolderForUser() { + echo "" + echo -n "* Introduce el nombre de la carpeta que deseas crear (sin acentos): " ; read folder + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + echo "* Debes introducir un nombre de carpeta!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + echo "* La carpeta '${folder}' ya está creada, elige otro nombre" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + echo "* Error: Fallo al crear la carpeta compartida '${folder}'" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + echo -n "* Introduce el nombre del usuario: " ; read forUser + randomFolder=/tmp/easy-samba/${RANDOM}-${RANDOM} + mkdir -p ${randomFolder} + chown ${forUser} ${randomFolder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + rm -rf ${linuxSambaFolder}/${folder} + echo "* No existe el usuario especificado!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + chmod 755 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = yes" >> ${sambaConfig} + echo "read only = no" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + echo "* Carpeta compartida '${folder}' (para ${forUser}) creada con exito!" + createFolderLink ${folder} + fi + fi + fi +} + +# Crear carpeta compartida para imprimir +function newFolderPrintable() { + echo "" + echo -n "* Introduce el nombre de la carpeta que deseas crear (sin acentos): " ; read folder + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + echo "* Debes introducir un nombre de carpeta!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + echo "* La carpeta '${folder}' ya está creada, elige otro nombre" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + echo "* Error: Fallo al crear la carpeta compartida '${folder}'" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + chmod 777 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = yes" >> ${sambaConfig} + echo "printable = yes" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + echo "* Carpeta compartida '${folder}' (printable) creada con exito!" + createFolderLink ${folder} + fi + fi +} + +# Funcion para reiniciar el servicio de Samba +function restartSamba() { + echo -n "* Deseas reiniciar los servicios de Samba (s[*]/n): " ; read sambaSN + if [ "${sambaSN}" == "n" ] ; then + echo "nule" > /dev/null + else + echo "* Reiniciando servicios de Samba" + sleep 3 + /etc/init.d/samba restart &> /dev/null + systemctl restart smbd.service 2> /dev/null + systemctl restart nmbd.service 2> /dev/null + systemctl restart smb.service 2> /dev/null + echo "* Servicios de Samba reiniciados" + echo "" + sleep 3 + fi +} + +# Funcion para todas borrar las carpetas compartidas +function restoreSmb() { + echo "" + echo "* Nota: Se van a eliminar todas las carpetas compartidas y su contenido!" + echo "* Importante: Se volvera al estado inicial del fichero 'smb.conf' antes de" + echo " de ejecutar 'easy-samba' por primera vez." + echo "" + echo -n "* Deseas continuar (s/n[*]): " ; read deleteFolder + if [ "${deleteFolder}" == "s" ] ; then + echo "* Borrando carpetas..." + sleep 2 + rm -rf ${linuxSambaFolder}/* 2> /dev/null + output=$? + if [ ${output} -eq 0 ] ; then + echo "* Carpetas borradas con exito!" + cp -rf ${sambaBackup} ${sambaConfig} 2> /dev/null + #rm -rf ${sambaBackup} 2> /dev/null + restartSamba + else + echo "* Fallo al borrar las carpetas compartidas!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + fi + else + echo "* Se ha anulado el proceso de restauracion" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + fi +} + +# Funcion para mostrar carpetas compartidas +function viewFolders() { + if [ "$(ls -A ${linuxSambaFolder})" ] ; then + cd ${linuxSambaFolder} + ls > ${sambaFoldersList} + echo "" + echo "* Lista de carpetas compartidas disponibles:" + echo "" + folderList="" + for folderDetected in $(cat ${sambaFoldersList}) ; do + echo " + ${folderDetected}" + done + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + echo "" + echo "* Actualmente no hay carpetas compartidas!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + fi +} + +# Funcion para borrar una carpeta compartida +function removeFolder() { + echo "" + echo -n "* Introduce el nombre de la carpeta que deseas borrar: " ; read folder + if [ -z ${folder} ] ; then + echo "* Debes introducir un nombre de carpeta!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + echo "* Borrando carpeta '${folder}' ..." + rm -rf ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -eq 0 ] ; then + readLine=$(cat ${sambaConfig} | grep "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" -n | cut -d ":" -f 1) + if [ -z ${readLine} ] ; then + echo "* La carpeta '${folder}' ha sido borrada pero no se ha encontrado en 'smb.conf'" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + initLine=$(expr ${readLine} - 1) + endLine=$(expr ${readLine} + 7) + totalLines=$(cat /etc/samba/smb.conf | wc -l) + count=1 + mkdir -p /tmp/easy-samba/ + echo > /tmp/easy-samba/smb.conf + while [ ${count} -lt $initLine ] ; do + cat /etc/samba/smb.conf | head -${count} | tail -1 >> /tmp/easy-samba/smb.conf + count=$(expr ${count} + 1) + done + count=$(expr ${endLine} + 1) + while [ ${count} -le ${totalLines} ] ; do + cat ${sambaConfig} | head -${count} | tail -1 >> /tmp/easy-samba/smb.conf + count=$(expr ${count} + 1) + done + cp -rf /tmp/easy-samba/smb.conf ${sambaConfig} + echo "* La carpeta '${folder} ha sido borrada con exito!" + deleteFolderLink ${folder} + restartSamba + fi + else + echo "* Error: No se ha podido borrar la carpeta '${folder}'" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + fi + else + echo "* Error: La carpeta '${folder}' no existe!" + echo -n "* Deseas ver un listado con las carpetas disponibles? (s[*]/n): " ; read available + if [ "${available}" == "n" ] ; then + echo "nule" > /dev/null + else + viewFolders + fi + fi +} + +# Mostrar menu con todas las opciones +mostrarMenu=0 +rootMessage +backupSmbConf +while [ ${mostrarMenu} -eq 0 ] ; do + clear + echo "" + echo "* easy-samba ${VERSION} (${M_DATE})" + echo "" + echo " 1 - Crear carpeta compartida" + echo " 2 - Crear carpeta compartida (solo lectura)" + echo " 3 - Crear carpeta compartida (para un usuario)" + echo " 4 - Crear carpeta compartida (printable)" + echo " 5 - Reiniciar servicios de Samba" + echo " 6 - Ver carpetas compartidas disponibles" + echo " 7 - Borrar carpeta compartida" + echo " 8 - Restaurar smb.conf" + echo "" + echo " 9 - Salir" + echo "" + echo -n " * Elige una opcion: " ; read opcion + if [ "${opcion}" == "1" ] ; then + newFolderEveryone + restartSamba + elif [ "${opcion}" == "2" ] ; then + newFolderReadOnly + restartSamba + elif [ "${opcion}" == "3" ] ; then + newFolderForUser + restartSamba + elif [ "${opcion}" == "4" ] ; then + newFolderPrintable + restartSamba + elif [ "${opcion}" == "5" ] ; then + restartSamba + elif [ "${opcion}" == "6" ] ; then + viewFolders + elif [ "${opcion}" == "7" ] ; then + removeFolder + elif [ "${opcion}" == "8" ] ; then + restoreSmb + elif [ "${opcion}" == "9" ] ; then + mostrarMenu=1 + elif [ -z "${opcion}" ] ; then + echo "" + echo "* Debes elegir alguna opcion" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + else + echo "" + echo "* Opcion no valida!" + echo "" + echo -n "* Pulsa INTRO para continuar... " ; read continue + fi +done diff --git a/src/easy-samba-gtk b/src/easy-samba-gtk new file mode 100755 index 0000000..99cb43e --- /dev/null +++ b/src/easy-samba-gtk @@ -0,0 +1,431 @@ +#!/bin/bash + +############################################################## +# Crear carpetas compartidas en Linux (GTK) # +# U. Modificacion: 02-06-2018 # +# Autor: q3aql # +# Contacto: q3aql@openmailbox.org # +# Licencia: GPL v2.0 # +############################################################## +VERSION="1.4 (GTK)" +M_DATE="020618" + +# Parametros globales +linuxSambaFolder="/opt/easy-samba" +sambaConfig="/etc/samba/smb.conf" +sambaBackup="/etc/samba/smb.conf.orig" +homeUsers="/home" +homeUsersList="/tmp/easy-samba-users.list" +sambaFoldersList="/tmp/easy-samba-folders.list" +sambaSedFolder="/tmp/easy-samba/word/" + +# Mostrar aviso de usuario de usuario root +#function rootMessage() { +# zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Nota: Recuerda haber ejecutado como root!" +#} + +# Funcion para realizar copia del fichero smb.conf original +function backupSmbConf() { + if [ -f ${sambaBackup} ] ; then + echo "OK" > /dev/null + else + echo "" >> ${sambaConfig} + echo "" >> ${sambaConfig} + cp -rf ${sambaConfig} ${sambaBackup} 2> /dev/null + fi +} + +# Funcion para eliminar espacios y simbolos +# Sintaxis: convertText "" +function convertText() { + wordToConvert=${1} + sambaSedFile="${sambaSedFolder}/easy-samba-${RANDOM}.txt" + mkdir -p ${sambaSedFolder} && chmod 777 -R ${sambaSedFolder} 2> /dev/null + echo "${wordToConvert}" > ${sambaSedFile} + # Borrar espacios + sed -i 's/ /_/g' "${sambaSedFile}" &> /dev/null + # Borrar simbolos + symbolsList="[ ] @ { } | \ / ~ # $ % & ? ¿ = ( ) < > ! ¡" + for findSymbol in ${symbolsList} ; do + sed -i "s/${findSymbol}//g" "${sambaSedFile}" &> /dev/null + done + # Borrar el resto de simbolos + sed -i 's/*//g' "${sambaSedFile}" &> /dev/null + sed -i 's/"//g' "${sambaSedFile}" &> /dev/null + sed -i "s/^//g" "${sambaSedFile}" &> /dev/null + # Cambiar algunos simbolos + sed -i 's/+/_/g' "${sambaSedFile}" &> /dev/null + sed -i 's/:/-/g' "${sambaSedFile}" &> /dev/null + sed -i 's/;/-/g' "${sambaSedFile}" &> /dev/null + # Mostrar texto convertido + wordToConvert=$(cat ${sambaSedFile}) + echo ${wordToConvert} +} + +# Funcion para crear enlace en el escritorio/home de los usuarios +# Sintaxis: createFolderLink [carpeta] + +function createFolderLink() { +zenity --question --title "easy-samba ${VERSION} (${M_DATE})" --cancel-label="No" --ok-label="Si" --text "Deseas crear un enlace en el escritorio/home para los usuarios locales?" +createLink=$? +if [ ${createLink} -eq 1 ] ; then + echo "nule" > /dev/null +else + if [ "$(ls -A ${homeUsers})" ] ; then + cd ${homeUsers} + ls > ${homeUsersList} + for userDetected in $(cat ${homeUsersList}) ; do + if [ -d ${homeUsers}/${userDetected}/Desktop ] ; then + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/Desktop/ 2> /dev/null + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escritorio ] ; then + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/Escritorio/ 2> /dev/null + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escriptori ] ; then + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/Escriptori/ 2> /dev/null + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + else + ln -s ${linuxSambaFolder}/${1} ${homeUsers}/${userDetected}/ 2> /dev/null + output=$? + fi + done + if [ ${output} -eq 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Enlaces creados correctamente!" + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: Fallo al crear los enlaces!" + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Usuarios no encontrados en ${homeUsers}" + fi +fi +} + +# Funcion para borrar los enlaces en el escritorio/home de los usuarios +# Sintaxis: deleteFolderLink [carpeta] +function deleteFolderLink() { +zenity --question --title "easy-samba ${VERSION} (${M_DATE})" --cancel-label="No" --ok-label="Si" --text "Deseas borrar los enlaces en el escritorio/home de los usuarios locales?" +deleteLink=$? +if [ ${deleteLink} -eq 1 ] ; then + echo "nule" > /dev/null +else + if [ "$(ls -A ${homeUsers})" ] ; then + cd ${homeUsers} + ls > ${homeUsersList} + for userDetected in $(cat ${homeUsersList}) ; do + if [ -d ${homeUsers}/${userDetected}/Desktop ] ; then + rm -f ${homeUsers}/${userDetected}/Desktop/${1} 2> /dev/null + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escritorio ] ; then + rm -f ${homeUsers}/${userDetected}/Escritorio/${1} 2> /dev/null + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + elif [ -d ${homeUsers}/${userDetected}/Escriptori ] ; then + rm -f ${homeUsers}/${userDetected}/Escriptori/${1} 2> /dev/null + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + else + rm -f ${homeUsers}/${userDetected}/${1} 2> /dev/null + output=$? + fi + done + if [ ${output} -eq 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Enlaces borrados correctamente!" + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: Fallo al borrar los enlaces!" + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Usuarios no encontrados en ${homeUsers}" + fi +fi +} + +# Funcion para crear carpeta compartida con acceso para todos +function newFolderEveryone() { + folder=$(zenity --entry --title "easy-samba ${VERSION} (${M_DATE})" --text "Introduce el nombre de la carpeta que deseas crear (sin acentos):") + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Debes introducir un nombre de carpeta!" + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "La carpeta '${folder}' ya está creada, elige otro nombre" + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: Fallo al crear la carpeta compartida '${folder}'" + else + chmod 777 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = yes" >> ${sambaConfig} + echo "read only = no" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Carpeta compartida '${folder}' creada con exito!" + createFolderLink ${folder} + fi + fi +} + +# Funcion para crear carpeta compartida de solo lectura +function newFolderReadOnly() { + folder=$(zenity --entry --title "easy-samba ${VERSION} (${M_DATE})" --text "Introduce el nombre de la carpeta que deseas crear (sin acentos):") + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Debes introducir un nombre de carpeta!" + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "La carpeta '${folder}' ya está creada, elige otro nombre" + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: Fallo al crear la carpeta compartida '${folder}'" + else + chmod 777 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = no" >> ${sambaConfig} + echo "read only = yes" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Carpeta compartida '${folder}' (solo lectura) creada con exito!" + createFolderLink ${folder} + fi + fi +} + +# Crear carpeta compartida para un usuario +function newFolderForUser() { + folder=$(zenity --entry --title "easy-samba ${VERSION} (${M_DATE})" --text "Introduce el nombre de la carpeta que deseas crear (sin acentos):") + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Debes introducir un nombre de carpeta!" + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "La carpeta '${folder}' ya está creada, elige otro nombre" + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: Fallo al crear la carpeta compartida '${folder}'" + else + forUser=$(zenity --entry --title "easy-samba ${VERSION} (${M_DATE})" --text "Introduce el nombre del usuario:") + randomFolder=/tmp/easy-samba/${RANDOM}-${RANDOM} + mkdir -p ${randomFolder} + chown ${forUser} ${randomFolder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + rm -rf ${linuxSambaFolder}/${folder} + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: No existe el usuario especificado!" + else + chmod 755 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = yes" >> ${sambaConfig} + echo "read only = no" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Carpeta compartida '${folder}' (para ${forUser}) creada con exito!" + createFolderLink ${folder} + fi + fi + fi +} + +# Crear carpeta compartida para imprimir +function newFolderPrintable() { + folder=$(zenity --entry --title "easy-samba ${VERSION} (${M_DATE})" --text "Introduce el nombre de la carpeta que deseas crear (sin acentos):") + formatText=$(convertText "${folder}") + folder=${formatText} + if [ -z ${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Debes introducir un nombre de carpeta!" + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "La carpeta '${folder}' ya está creada, elige otro nombre" + else + mkdir -p ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -ne 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: Fallo al crear la carpeta compartida '${folder}'" + else + chmod 777 -R ${linuxSambaFolder}/${folder} + echo "[${folder}]" >> ${sambaConfig} + echo "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" >> ${sambaConfig} + echo "path = ${linuxSambaFolder}/${folder}" >> ${sambaConfig} + echo "comment = Folder by easy-samba ${VERSION} (${M_DATE})" >> ${sambaConfig} + echo "browseable = yes" >> ${sambaConfig} + echo "writeable = yes" >> ${sambaConfig} + echo "printable = yes" >> ${sambaConfig} + echo "guest ok = yes" >> ${sambaConfig} + echo "" >> ${sambaConfig} + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Carpeta compartida '${folder}' (printable) creada con exito!" + createFolderLink ${folder} + fi + fi +} + +# Funcion para reiniciar el servicio de Samba +function restartSamba() { + zenity --question --title "easy-samba ${VERSION} (${M_DATE})" --cancel-label="No" --ok-label="Si" --text "Deseas reiniciar los servicios de Samba?" + sambaSN=$? + if [ "${sambaSN}" == "1" ] ; then + echo "nule" > /dev/null + else + sleep 4 | zenity --progress --title "easy-samba ${VERSION} (${M_DATE})" --auto-close --text "Reiniciando servicios de Samba" + /etc/init.d/samba restart &> /dev/null + systemctl restart smbd.service 2> /dev/null + systemctl restart nmbd.service 2> /dev/null + systemctl restart smb.service 2> /dev/null + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Servicios de Samba reiniciados" + fi +} + +# Funcion para borrar todas las carpetas compartidas +function restoreSmb() { + echo "" + zenity --question --title "easy-samba ${VERSION} (${M_DATE})" --cancel-label="No" --ok-label="Si" \ +--text "Nota: Se van a eliminar todas las carpetas compartidas y su contenido\n\nImportante: Se volvera al estado inicial del fichero 'smb.conf' antes de\nde ejecutar 'easy-samba' por primera vez\n\nDeseas continuar?" + deleteFolder=$? + if [ ${deleteFolder} -eq 0 ] ; then + sleep 3 | zenity --progress --title "easy-samba ${VERSION} (${M_DATE})" --auto-close --text "Borrando carpetas" + rm -rf ${linuxSambaFolder}/* | zenity --progress --title "easy-samba ${VERSION} (${M_DATE})" --auto-close --text "Finalizando proceso de borrado" + output=$? + if [ ${output} -eq 0 ] ; then + cp -rf ${sambaBackup} ${sambaConfig} 2> /dev/null + #rm -rf ${sambaBackup} 2> /dev/null + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Carpetas borradas con exito!" + restartSamba + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error al borrar las carpetas compartidas" + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Se ha anulado el proceso de restauracion" + fi +} + +# Funcion para mostrar carpetas compartidas +function viewFolders() { + if [ "$(ls -A ${linuxSambaFolder})" ] ; then + cd ${linuxSambaFolder} + ls > ${sambaFoldersList} + folderList="" + for folderDetected in $(cat ${sambaFoldersList}) ; do + folderList="${folderList} ${folderDetected}" + done + folder=$(zenity --width=390 --height=300 --list --title "easy-samba ${VERSION} ($M_DATE)" \ + --column "Lista de carpetas compartidas disponibles:" ${folderList}) + if [ -z ${folder} ] ; then + echo "nule" > /dev/null + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Nombre de carpeta: ${folder}\n\nRuta: ${linuxSambaFolder}/${folder}" + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: La carpeta '${folder}' no existe!" + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "Actualmente no hay carpetas compartidas!" + fi +} + +# Funcion para borrar una carpeta compartida +function removeFolder() { + if [ "$(ls -A ${linuxSambaFolder})" ] ; then + cd ${linuxSambaFolder} + ls > ${sambaFoldersList} + folderList="" + for folderDetected in $(cat ${sambaFoldersList}) ; do + folderList="${folderList} ${folderDetected}" + done + folder=$(zenity --width=390 --height=300 --list --title "easy-samba ${VERSION} ($M_DATE)" \ + --column "Selecciona una carpeta para borrar:" ${folderList}) + if [ -z ${folder} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Debes seleccionar una carpeta de la lista" + elif [ -d ${linuxSambaFolder}/${folder} ] ; then + sleep 2 | zenity --progress --title "easy-samba ${VERSION} (${M_DATE})" --auto-close --text "Borrando carpeta..." + rm -rf ${linuxSambaFolder}/${folder} 2> /dev/null + output=$? + if [ ${output} -eq 0 ] ; then + readLine=$(cat ${sambaConfig} | grep "# Folder to ${linuxSambaFolder}/${folder} # 00bc00" -n | cut -d ":" -f 1) + if [ -z ${readLine} ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "La carpeta '${folder}' ha sido borrada pero no se ha encontrado en 'smb.conf'" + else + initLine=$(expr ${readLine} - 1) + endLine=$(expr ${readLine} + 7) + totalLines=$(cat /etc/samba/smb.conf | wc -l) + count=1 + mkdir -p /tmp/easy-samba/ + echo > /tmp/easy-samba/smb.conf + while [ ${count} -lt $initLine ] ; do + cat /etc/samba/smb.conf | head -${count} | tail -1 >> /tmp/easy-samba/smb.conf + count=$(expr ${count} + 1) + done + count=$(expr ${endLine} + 1) + while [ ${count} -le ${totalLines} ] ; do + cat ${sambaConfig} | head -${count} | tail -1 >> /tmp/easy-samba/smb.conf + count=$(expr ${count} + 1) + done + cp -rf /tmp/easy-samba/smb.conf ${sambaConfig} + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "La carpeta '${folder} ha sido borrada con exito!" + deleteFolderLink ${folder} + restartSamba + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: No se ha podido borrar la carpeta '${folder}'" + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --error --text "Error: La carpeta '${folder}' no existe!" + fi + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info --text "No hay carpetas disponibles para borrar!" + fi +} + +# Mostrar menu con todas las opciones +mostrarMenu=0 +#rootMessage +backupSmbConf +while [ ${mostrarMenu} -eq 0 ] ; do + clear + opcion=$(zenity --width=390 --height=355 --list --title "easy-samba ${VERSION} ($M_DATE)" \ + --column "Selecciona una opcion:" "Crear carpeta compartida" "Crear carpeta compartida (solo lectura)" \ + "Crear carpeta compartida (para un usuario)" "Crear carpeta compartida (printable)" \ + "Reiniciar servicios de Samba" "Ver carpetas compartidas disponibles" "Borrar carpeta compartida" \ + "Restaurar smb.conf" "Salir") + if [ "${opcion}" == "Crear carpeta compartida" ] ; then + newFolderEveryone + restartSamba + elif [ "${opcion}" == "Crear carpeta compartida (solo lectura)" ] ; then + newFolderReadOnly + restartSamba + elif [ "${opcion}" == "Crear carpeta compartida (para un usuario)" ] ; then + newFolderForUser + restartSamba + elif [ "${opcion}" == "Crear carpeta compartida (printable)" ] ; then + newFolderPrintable + restartSamba + elif [ "${opcion}" == "Reiniciar servicios de Samba" ] ; then + restartSamba + elif [ "${opcion}" == "Ver carpetas compartidas disponibles" ] ; then + viewFolders + elif [ "${opcion}" == "Borrar carpeta compartida" ] ; then + removeFolder + elif [ "${opcion}" == "Restaurar smb.conf" ] ; then + restoreSmb + elif [ "${opcion}" == "Salir" ] ; then + mostrarMenu=1 + else + zenity --title "easy-samba ${VERSION} (${M_DATE})" --warning --text "Elige una de las opciones del menu" + fi +done diff --git a/src/easy-samba-gtk-admin b/src/easy-samba-gtk-admin new file mode 100755 index 0000000..83b6c7b --- /dev/null +++ b/src/easy-samba-gtk-admin @@ -0,0 +1,63 @@ +#!/bin/bash + +############################################################## +# Crear carpetas compartidas en Linux (GTK) # +# U. Modificacion: 02-06-2018 # +# Autor: q3aql # +# Contacto: q3aql@openmailbox.org # +# Licencia: GPL v2.0 # +############################################################## +VERSION="1.4 (GTK)" +M_DATE="020618" + +# Enlace con gksudo,gksu o bessu a easy-samba-gtk +function showRootMessage() { + if [ -f /usr/bin/gksudo ] ; then + gksudo /usr/bin/easy-samba-gtk + exit + elif [ -f /bin/gksudo ] ; then + gksudo /usr/bin/easy-samba-gtk + exit + elif [ -f /usr/bin/gksu ] ; then + gksu /usr/bin/easy-samba-gtk + exit + elif [ -f /bin/gksu ] ; then + gksu /usr/bin/easy-samba-gtk + exit + elif [ -f /usr/bin/beesu ] ; then + beesu /usr/bin/easy-samba-gtk + exit + elif [ -f /bin/beesu ] ; then + beesu /usr/bin/easy-samba-gtk + exit + else + zenity2 -h &> /dev/null + output=$? + if [ ${output} -eq 0 ] ; then + zenity --title "easy-samba ${VERSION} (${M_DATE})" --info \ + --text "El programa 'easy-samba-gtk' no ha podido ser ejecutado como administrador\n\nPorfavor, ejecuta el comando 'easy-samba-gtk' como usuario root en la terminal" + else + xterm -T "easy-samba ${VERSION} (${M_DATE})" -e "easy-samba-gtk-admin --error" + fi + fi +} + +# Funcion para mostrar mensaje de error +function errorMessage() { + echo "" + echo "* ATENCION!:" + echo "" + echo "* El programa 'easy-samba-gtk' no ha podido ser ejecutado como administrador" + echo "" + echo "* Porfavor, ejecuta el comando 'easy-samba-gtk' como usuario root en la terminal" + echo "" + echo -n "* Pulsa INTRO para salir... " ; read continue + exit +} + +# Inicio del script +if [ "${1}" == "--error" ] ; then + errorMessage +else + showRootMessage +fi